亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在Java中刪除雙向鏈表中的節點

在Java中刪除雙向鏈表中的節點

精慕HU 2022-06-04 16:47:49
我正在學習 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什么并不重要。NodeNode



查看完整回答
反對 回復 2022-06-04
?
慕碼人2483693

TA貢獻1860條經驗 獲得超9個贊

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



查看完整回答
反對 回復 2022-06-04
?
桃花長相依

TA貢獻1860條經驗 獲得超8個贊

當節點從列表中刪除時,您不需要設置當前的下一個和上一個 null。

請記住,遍歷雙向鏈表的唯一方法是從第一個或頭節點開始,然后繼續直到所需的節點或最后一個/尾節點。如果要刪除一個節點,只需將其鏈接到它的下一個節點,反之亦然。

話雖如此,將已刪除節點的 next 和 previous 設置為 null 并沒有錯,因為這會阻止您通過該節點的引用遍歷列表。


查看完整回答
反對 回復 2022-06-04
  • 3 回答
  • 0 關注
  • 271 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號