链表结构
6.1表节点
1.一个表节点只包含一个元素,但是它还包含另一个表节点(实际上是包含指向这个表节点的引用)。
2.创建节点的方式
先创建节点,再链接。
A)ListNode node1 = new ListNode(“A”);
ListNodenode2 = new ListNode(“B”);
ListNodenode3 = new ListNode(“C”);
node1.setNext(node2);
node2.setNext(node3);
利用重载构造函数的替代方法是:用一个表达式创建整个链。
B)new ListNode
(“A”,newListNode
(“B”,new ListNode(“C”)));
6.2栈和队列
1.(非空的)LinkedStack包含一个ListNode(实质上是包含一个指向它的引用),这个ListNode反过来有包含一个元素,也许还包含另一个ListNode。
2.LinkedQueue实现Queue接口。因为我们在队尾添加元素,并从队头删除它们,所以必须记录节点链的两端。
6.3 LinkedList类
1.LinkedList具有一个front字段,它是一个ListNode。就像在LinkedStack中一样,这个节点可能反过来又包含其他的ListNode。
2.两指算法:每次经过它的循环时都会指向两个连续的节点,所以称为两指算法。
3.ListIterator记录了包含由next()最近返回的Object的节点,以及该节点的前驱。
6.5小结
1.ListNode包含一个元素,并且可能还包含指向另一个ListNode的引用。我们可以构建任意长的ListNode链。
2.LinkedStack在链的一端接入和接出节点。LinkedQueue类必须记录链的两端。
3.LinkedList类是一种通用链表结构。Predecessor接口允许我们避免编写特殊的代码,用于添加一个元素到空List中,删除第一个元素等。
6.6术语
双向链接(doubly linked):可以指一种表节点,它同时具有指向链中前一个节点和下一个节点的引用。也可以指一种链表结构,它由双向链接点组成。
表节点(list node):一个对象,包含一个元素以及指向另一个表节点的引用。表节点可以在链中串接起来。
随机访问(rendom access):允许访问任意节点,如数组或DVD。
顺序访问(sequential accesss):只允许通过遍历期间的点来进行访问,如链表结构或VHS磁带。
两只算法(two-finger algorithm):需要记录两个连续表节点的算法。