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

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

從雙向鏈表中刪除給定值的所有出現

從雙向鏈表中刪除給定值的所有出現

慕沐林林 2022-07-14 16:58:25
好吧,長話短說,我在這里要做的是從雙向鏈表中刪除值 e 的所有實例。據我所知,我的邏輯至少大部分是正確的,但由于某種原因,它實際上并沒有刪除我的測試用例中的任何節點。public boolean removeAll(int e) {    DIntNode dummy = head,next = null;     if (head == null)        return false;    while (dummy != null) {        if (dummy.getData() == e) {            next = dummy.getNext();            dummy.getNext().setPrev(null);            dummy = next;            return true;        }        else             dummy = dummy.getNext();    }    return false;}這就是我目前的方法代碼。我的邏輯是使用一個從頭部開始的虛擬 DIntNode 和一個“下一個”節點來幫助我縮小列表,可以這么說。換句話說,如果列表類似于“1<-> 1 <-> 2 <-> 3”,理論上該函數會將其更改為“2<->3”。這是一個布爾函數的原因是因為如果給定值從列表中刪除,我需要返回 true。我缺少邏輯中的另一個步驟,還是方法本身不可靠?在這一點上我非常不確定,所以任何和所有的幫助將不勝感激。
查看完整描述

4 回答

?
慕容森

TA貢獻1853條經驗 獲得超18個贊

你設置

dummy.getNext().setPrev(null);

但是前一個節點也引用了您嘗試刪除的下一個節點。您應該將此引用設置為下一個活動值。那是因為當您想獲取所有鏈表時,前一個值仍然知道您刪除的節點,因為下一個節點引用


查看完整回答
反對 回復 2022-07-14
?
翻翻過去那場雪

TA貢獻2065條經驗 獲得超14個贊

代碼有兩個問題:

  1. 當重新鏈接雙向鏈表時,從 A-B-C 中刪除 B,您需要將 A 的下一個節點設置為 C,并將 C前一個節點設置為 A。嘗試保留方法名稱:

    A.setNext(current.getNext());

    C.setNext(current.getPrev());

  2. 使用您的代碼,如果您發現一個出現, you return,這意味著自從您跳出該方法后,不會刪除其他實例。您可能需要一個新boolean removed變量,即設置為false、return true更改為removed = truereturn false更改為return removed


查看完整回答
反對 回復 2022-07-14
?
慕森王

TA貢獻1777條經驗 獲得超3個贊

該方法在第一次遇到“e”后退出。


如果你想刪除'e'的所有實例,那么你應該有這樣的東西:


boolean listChanged = false;

while (dummy != null) {

    if (dummy.getData() == e) {

      // update list

      ...

      listChanged = true;

    }

    ...

}

return listChanged;


查看完整回答
反對 回復 2022-07-14
?
弒天下

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

您可以嘗試使用以下代碼:


if (dummy.getData() == e) {

    DIntNode temp = dummy.getPrevious();

    temp.next = dummy.getNext();

    temp = dummy.getNext();

    temp.previous = dummy.getPrevious();

    return true;

 }

這使用了以前的參考。因此,前一個節點現在將引用您的虛擬節點的下一個節點(要刪除的節點)。同樣,虛擬節點的下一個節點將引用您的虛擬節點的前一個節點。因此,虛擬節點將從其雙向鏈接列表中失去其連接/鏈接,這就是我們想要的!


請試試。


查看完整回答
反對 回復 2022-07-14
  • 4 回答
  • 0 關注
  • 151 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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