的代碼應該是這樣的:
public void deleteItem(int target)
{
int index = 0;
CarNode item = head;
CarNode prev = null;
while(item != null)
{
if (index == target) {
if (prev == null) {
head = item.getNode();
return; // We've removed the target.
} else {
prev.setNode(item.getNode());
return; // We've removed the target.
}
}
prev = item;
item = item.getNode();
index++;
}
}
讓我們打破這:
int index = 0;
CarNode item = head;
CarNode prev = null;
我們需要兩個變量:一個用於存儲我們正在尋找的元素,另存儲前一個元素(我們將在刪除元素後使用它來重新連接列表)。首先,我們目前是頭腦,而我們以前並不存在。 index
會在我們達到目標時通知我們。
while(item != null)
我們要重複,直到我們打了列表的末尾,由null
節點標記。
if (index == target) {
if (prev == null) {
head = item.getNode();
return; // We've removed the target.
} else {
prev.setNode(item.getNode());
return; // We've removed the target.
}
}
如果我們已經找到了目標,我們將其刪除。如果之前爲空,那麼目標是頭部,所以我們將頭部移動到第二個元素。否則,我們使前一個節點的引用成爲當前節點的引用,從而將當前節點從列表中刪除。一旦我們移除了目標,我們就完成了,所以我們回來了。
prev = item;
item = item.getNode();
index++;
更新以前和當前節點。兩者都向前移動一個節點。索引增加。
如何圖示的例子:
取尺寸3.列表它看起來像這樣:
我們現在稱之爲list.deleteItem(1);
此實例化一個prev
和next
節點。 next
指向第一個節點,並且prev
爲空。
我們的目標是1,所以我們移動到下一個節點。現在prev
指向next
用來指向什麼,next
指向列表中的第二個對象(我們想要移除的那個)。
我們通過設置prev
節點的引用是next
節點的引用將其刪除。
當我們從方法返回,Java的垃圾回收,它的工作,我們就只剩下:
田田!節點已從列表中刪除!
我建議你檢查一下參考文獻是什麼,然後改述你的問題。很難弄清楚你遇到了什麼問題。 _「在我們修改引用的節點時引用優先於原始引用」_似乎沒有多大意義,即使在代碼的上下文中也是如此。你能編輯你的文章並重新修改具體的問題嗎? –
引用我的意思是下一個和前一個,而不是項目。 – user2089523
向我們展示'CarNode'的定義...以及'CarNode next =(item.node).node;'這兩行似乎都包含一個錯誤(其中一個「節點」應該是「next」 )_and_也可能意味着下一個指針在存儲在列表中的數據中,而不是在listnode中,這將是一個設計問題。 –