中山台州网站建设推广,互联网销售包括哪些,wordpress淘宝客建站教程,wordpress等待加载动画设置在目前#xff0c;许多互联网公司的面试已经要求能手撕集合源码#xff0c;集合源码本身算是源码里比较简单的一部分#xff0c;但是要在面试极短的10来分钟内快速写出一个简易版的源码还是比较麻烦的#xff0c;很容易出现各种小问题。所以在平时就要注重这方面的联系。 以…在目前许多互联网公司的面试已经要求能手撕集合源码集合源码本身算是源码里比较简单的一部分但是要在面试极短的10来分钟内快速写出一个简易版的源码还是比较麻烦的很容易出现各种小问题。所以在平时就要注重这方面的联系。 以下是我自己写的一个简易双端队列我没有实现List接口因为里面要实现的函数方法太多了所以只是挑了几个核心的代码来写本质其实就是头插法和尾插法的结合。 代码主要有三个文件分别是Node节点Deque类和测试文件。 Node:
package org.example.collection;import lombok.Data;import java.util.HashMap;
import java.util.Map;Data
public class NodeT {T var;NodeT prev;NodeT next;Node(NodeT prev,T element, NodeT next){this.var element;this.next next;this.prev prev;}}Deque实现文件
package org.example.collection;public class DequeCodeE{int size 0;NodeE first;NodeE last;public DequeCode() {this.first new NodeE(null,null,null);this.last new NodeE(null,null,null);//first和last之间应该建立联系first.next last;last.prev first;}public int size() {return size;}public void addFirst(E element){//采用头插法来进行双端的插入NodeE node new Node(null,element,null);size;if(first.nextnull){first.next node;node.prev first;return ;}NodeE temp first.next;first.next node;node.prev first;node.next temp;temp.prev node;}public void addLast(E element){//和头插入相同的思路NodeE node new Node(null,element,null);NodeE temp last.prev;size;if(last.prevnull){last.prev node;node.next last;return ;}last.prev node;node.next last;temp.next node;node.prev temp;}public void removeFirst() throws Exception {if(size 0) throw new Exception(出现问题);NodeE node first.next;first.next first.next.next;node.next.prev first;}public void removeLast() throws Exception {if(size 0) throw new Exception(出现问题);NodeE node last.prev;last.prev last.prev.prev;node.prev.next last;}public NodeE peekFirst(){return first.next;}public NodeE peekLast(){return last.prev;}
}
最后是测试文件
package org.example.collection;public class TestDeque {public static void main(String[] args) throws Exception {DequeCodeInteger deque new DequeCode();deque.addFirst(1);deque.addLast(2);System.out.println(deque.peekFirst().var);System.out.println(deque.peekLast().var);deque.addFirst(3);deque.addLast(4);System.out.println(deque.peekFirst().var);System.out.println(deque.peekLast().var);deque.removeFirst();deque.removeLast();System.out.println(deque.peekFirst().var);System.out.println(deque.peekLast().var);}
}
结果和预期一致 代码逻辑很简单但是细节方面仍有很大的提升空间。但是面试时间短这些代码能在10来分钟无失误写出想来也是够用了。