链表是一种递归的数据结构,它或者为空,或者是指向一个节点的引用,该节点含有一个泛型的元素和一个指向另一条链表的引用。
private class Node {
Item item;
Node next;
}
其它操作比如删除某个节点、在某个节点前插入一个节点,就不是那么容易了,需要遍历整个链表,需要消耗的时间与链表的长度成正比。利用双向链表可以解决这个问题。
每个节点都含有两个连接,分别指向不同的方向,可以简单的实现任意节点的删除和插入操作。
public class DoublyLinkedList<Item> implements Iterable<Item> {
private int n; // number of elements on list
private Node pre; // sentinel before first item
private Node post; // sentinel after last item
public DoublyLinkedList() {
pre = new Node();
post = new Node();
pre.next = post;
post.prev = pre;
}
// linked list node helper data type
private class Node {
private Item item;
private Node next;
private Node prev;
}
public boolean isEmpty() { return n == 0; }
public int size() { return n; }
// add the item to the list
public void add(Item item) {
Node last = post.prev;
Node x = new Node();
x.item = item;
x.next = post;
x.prev = last;
post.prev = x;
last.next = x;
n++;
}
......
}



