[align=center][img]http://dl.iteye.com/upload/attachment/0078/0263/d896ca36-894d-3965-adfa-0c7ef047418e.bmp[/img][/align]
[b][size=large]背景:[/size]
[/b]
[size=medium]为了更加好了解LinkList的工作原理,上面是链表的示意图[/size]
[size=medium]定义了一个内部类[b]header[/b]变量,其实起到了首节点的标志作用,不存放任何元素(上图的一个节点)
[/size]
[list]
[*]下面创建一个节点
[/list]
上面可以转换成下面的方式
[size=medium]当插入第一个节点是,传入了e,header两个元素,header是刚开始创建的头指针,newEntry1的previous对象为header,节点的size增加1[/size]
[list]
[*]因此newEntry1.previous.next= header.next=newEntry1
[*]因此newEntry1.next.previous= header.previous=newEntry1
[/list]
[size=medium]当插入第二个节点是,传入了e,header两个元素,header是刚开始创建的头指针,newEntry2的previous对象为header,节点的size增加1[/size]
[list]
[*]因此newEntry2.previous.next= newEntry1.next=newEntry2
[*]因此newEntry2.next.previous= header.previous=newEntry2
[/list]
..... 依次类推
[b][size=large]背景:[/size]
[/b]
[size=medium]为了更加好了解LinkList的工作原理,上面是链表的示意图[/size]
private transient Entry<E> header = new Entry<E>(null, null, null);
private transient int size = 0;
/**
* Constructs an empty list.
*/
public LinkedList() {
header.next = header.previous = header;
}[size=medium]定义了一个内部类[b]header[/b]变量,其实起到了首节点的标志作用,不存放任何元素(上图的一个节点)
[/size]
private transient Entry<E> header = new Entry<E>(null, null, null); private static class Entry<E> {
E element;
Entry<E> next;
Entry<E> previous;
Entry(E element, Entry<E> next, Entry<E> previous) {
this.element = element;
this.next = next;
this.previous = previous;
}
}[list]
[*]下面创建一个节点
[/list]
public boolean add(E e) {
addBefore(e, header);
return true;
}
private Entry<E> addBefore(E e, Entry<E> entry) {
Entry<E> newEntry = new Entry<E>(e, entry, entry.previous);
newEntry.previous.next = newEntry;
newEntry.next.previous = newEntry;
size++;
modCount++;
return newEntry;
}上面可以转换成下面的方式
Entry<E> newEntry = new Entry<E>(e, header, header.previous);[size=medium]当插入第一个节点是,传入了e,header两个元素,header是刚开始创建的头指针,newEntry1的previous对象为header,节点的size增加1[/size]
[list]
[*]因此newEntry1.previous.next= header.next=newEntry1
[*]因此newEntry1.next.previous= header.previous=newEntry1
[/list]
[size=medium]当插入第二个节点是,传入了e,header两个元素,header是刚开始创建的头指针,newEntry2的previous对象为header,节点的size增加1[/size]
[list]
[*]因此newEntry2.previous.next= newEntry1.next=newEntry2
[*]因此newEntry2.next.previous= header.previous=newEntry2
[/list]
..... 依次类推
本文深入讲解了链表这一数据结构的实现原理,通过具体代码示例介绍了如何创建链表节点,以及如何通过头节点进行元素的添加操作。
447

被折叠的 条评论
为什么被折叠?



