我們正在嘗試編寫一種方法來從LUT的鏈表實現中刪除具有特定鍵的節點。從鏈表LUT中刪除一個節點?
摘要的代碼我寫道:
public void delete (String k) {
Node currNode = listHead;
Node prevNode = listHead;
Key key = new Key (k);
while (!currNode.key.equals(k) && currNode != null){
prevNode = currNode;
currNode = currNode.next;
}
if (currNode == listHead) {
listHead = listHead.next;
} else {
prevNode.next = currNode.next;
}
}
我的朋友基本上寫了同樣的事情,但沒有使用以前的節點指針,而是寫了他的最後一行:
currNode = currNode.next //detach point, override
這兩者是否相同?我認爲我對Java內存管理感到困惑。
如果您已經創建了listHead
節點別的地方,和你寫的:
Node currNode = listHead;
currNode
僅存儲到listHead
存儲在存儲位置的參考,對不對?所以在while循環中,當你做currNode = currNode.next
時,你正在做的是進入currNode
中引用的內存位置,然後查看下一個變量並將參考存儲在currNode
中?所以基本上更新currNode
指向的地方。這意味着我的朋友的代碼是錯的,對吧?由於他的代碼同樣意味着:「更新currNode
中的當前引用,其內存位置爲currNode.next
」。
有人會介意幫助我去除霧嗎?