我正在學習 Java 中的雙向鏈表,并且找到了有關刪除具有特定鍵的節點的教程。這是代碼:public Node deleteKey(int key) { Node current = first; while (current.getData() != key) { current = current.getNext(); if (current == null) { return null; } } if (current == first) { first = current.getNext(); } else { current.getPrevious().setNext(current.getNext()); } if (current == last) { last = current.getPrevious(); } else { current.getNext().setPrevious(current.getPrevious()); } return current;}我想問你這段代碼是否正確。在我看來這是不正確的,因為他也需要這樣做:current.setNext(null);current.setPrevious(null);
3 回答

慕沐林林
TA貢獻2016條經驗 獲得超9個贊
調用current.setNext(null)
andcurrent.setPrevious(null)
是不必要的,因為在調用 之后deleteKey(int key)
,列表中沒有任何Node
內容將包含對已刪除對象的Node
引用(由 引用),因此已刪除對象所指的是current
什么并不重要。Node
Node

慕碼人2483693
TA貢獻1860條經驗 獲得超9個贊
將 next 和 previous 指針設置為 并不是絕對必要的null
,但是,由于節點是由deleteKey
方法返回的,我同意你的觀點:最好將它們設置為null
并防止任何內存泄漏。這段代碼的另一個問題是,如果列表為空,first
則為 null,while 表達式將拋出 NPE。

桃花長相依
TA貢獻1860條經驗 獲得超8個贊
當節點從列表中刪除時,您不需要設置當前的下一個和上一個 null。
請記住,遍歷雙向鏈表的唯一方法是從第一個或頭節點開始,然后繼續直到所需的節點或最后一個/尾節點。如果要刪除一個節點,只需將其鏈接到它的下一個節點,反之亦然。
話雖如此,將已刪除節點的 next 和 previous 設置為 null 并沒有錯,因為這會阻止您通過該節點的引用遍歷列表。
添加回答
舉報
0/150
提交
取消