1 public class LinkedList
2 extends AbstractSequentialList 3 implements List, Deque, Cloneable, java.io.Serializable 4 { 5 private transient Entry header = new Entry(null, null, null);//初始化时先实例一个header,链表头 6 7 8 /** 9 * Constructs an empty list.//构造一个空链表 10 */ 11 public LinkedList() { 12 header.next = header.previous = header; //把链表头和尾先连到自己(1) 13 addBefore(e, header);(2) 14 15 } 16 17 ![]() ![]() 18 19 public boolean add(E e) {//插入链表方法 20 return true; 21 } 22 ![]() ![]() 23 24 private static class Entry {//每个数据存放,所要用到的静态内部类 25 E element; 26 Entry next;//后一个节点 27 Entry previous;//接一个节点 28 29 Entry(E element, Entry next, Entry previous) { 30 this.element = element; 31 this.next = next; 32 this.previous = previous; 33 } 34 } 35 36 37 //插入操作方法 38 private Entry addBefore(E e, Entry entry) { 39 Entry newEntry = new Entry(e, entry, entry.previous);(3) 40 newEntry.previous.next = newEntry;(4) 41 newEntry.next.previous = newEntry;(5) 42 size++;(6) 43 modCount++; 44 return newEntry; 45 } 46 47 48 /*其他方法~~*/ 49 50
以上部分就是算法所在:(一个简单的公式替换过程) newEntry.previous.next = newEntry;
作用:
相当于 E1.previous.next = header.next = E1 Entry E2 = new Entry(data, header, header.previous);
注意代码部分的负值。关键就是这里,实例化的时候,E2.previous = header.previous = E1 |
|