鏈表結構
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):需要記錄兩個連續表節點的算法。