所以我想更好地理解LinkedLists,並且練習告訴我爲我編寫的鏈表類的迭代器類的方法添加remove()
。 我的迭代器類看起來是這樣的:LinkedList迭代器類的remove()
public java.util.Iterator<T> iterator() {
return new java.util.Iterator<T>() {
Node prev= null,curr = head;
public boolean hasNext() {
if (curr != null) {
return true;
}
return false;
}
public T next() {
T temp = curr.data;
prev = curr;
curr = curr.next;
return temp;
}
public void remove() {
if(prev==null || curr==null)
head=head.next;
else
prev.next=curr.next;
}
};
}
而且,我寫它的測試去有點像這樣:
public void testiterator(){
BasicLinkedList<String> basicList = new BasicLinkedList<String>();
basicList.addToFront("Blue").addToEnd("Red").addToFront("Yellow");
for(Iterator<String> i = basicList.iterator(); i.hasNext();){
if(i.next().equals("Blue"))
i.remove();
}
assertTrue(basicList.toString().equals("\" Yellow Red \""));
}
然而,當,當我打印basicList,它告訴我,該列表包含黃色和藍色而不是黃色和紅色。我是否執行了remove()
方法錯誤,我是否使用了錯誤,或者兩者都有?
感謝您的時間傢伙!
這幾乎是加強我的想法發生了什麼。我通過添加第三個稱爲prevOriginal的節點來修復我的代碼。當next()被稱爲prevOriginal = prev之前,任何事情都被設置爲下一個。然後在刪除我用prevOriginal.next = prev.next正確地移動列表。原油我知道,但我想它的工作原理:\ 謝謝! – CoderNinja 2013-03-06 22:06:00