我正在通過LinkedLists上的大學實踐。 我很難理解迭代器遍歷LinkedList的add()方法。我們的講師給了我們實現這個代碼,所以從他身上究竟複製:關於LinkedList中ListIterator的add()方法的困惑
public class LinkedList
{
public LinkedList() {
Node first = null;
}
class Node {
public Object data;
public Node next;
}
class LinkedListIterator implements ListIterator {
public LinkedListIterator() {
Node position = null;
Node previous = null;
}
public void add (Object element) {
if (position == null) {
addFirst(element);
current = first;
} else {
//1 Node newNode = new Node();
//2 newNode.data = element;
//3 newNode.next = current.next;
//4 current.next = newNode;
//5 current = newNode;
}
previous = current
}
注:我故意不封裝的變量,並切出多餘的代碼,以節省空間。我知道它不能編譯,但我的問題更具概念性。
添加方法:
if語句只是檢測是否迭代器的位置是否無效,在這種情況下,添加元素LinkedList的開始,並將迭代器位置,這個新創建的節點。
else語句令我困惑:
行1 & 2:創建一個新節點並將其數據設置爲元素參數。
第3行next這個新節點的變量被設置爲當前節點的下一個節點,即它被設置爲迭代器指向的節點的位置之後的任何值。
第4行,迭代器爲的節點的「下一個」當前爲,指向的變爲newNode(有效地完成在兩個現有節點之間插入新節點)。
第5行,迭代器的位置設置爲指向newNode。
在else語句之後,Iterator所指向的前一個節點被設置爲當前節點。
這裏存在這個問題 - 這樣做有效地同步了迭代器的位置和以前的位置。我通過Eclipse調試器進行了檢查。這使得以前無用。但是,我知道你無法反向使用標準迭代器遍歷LinkedList。
當我評論這條線時,似乎沒有任何改變。這一行簡直是不必要的,還是它有一些我實際上沒有意識到的功能? (我要求的另一個原因是因爲在我們的remove()方法的註釋中出現了相反的情況,這似乎沒有用處。
編輯:看起來這個答案可能會回答爲我的當然開發。現在,我先前=當前行移動到電流= newNode線之上。這似乎保持所有值中分離出來。
@Aubin它實際上是一個['ListIterator'](http://docs.oracle.com/javase/7/docs/api/java/util/ListIterator.html),它擴展了常規的'Iterator'接口幷包含'add','set','hasPrevious'和'previous'方法。 – matts 2013-02-27 18:04:37
啊,道歉 - 應該更具體一些。 – 2013-02-27 20:18:36