4 回答

TA貢獻1853條經驗 獲得超18個贊
你設置
dummy.getNext().setPrev(null);
但是前一個節點也引用了您嘗試刪除的下一個節點。您應該將此引用設置為下一個活動值。那是因為當您想獲取所有鏈表時,前一個值仍然知道您刪除的節點,因為下一個節點引用

TA貢獻2065條經驗 獲得超14個贊
代碼有兩個問題:
當重新鏈接雙向鏈表時,從 A-B-C 中刪除 B,您需要將 A 的下一個節點設置為 C,并將 C的前一個節點設置為 A。嘗試保留方法名稱:
A.setNext(current.getNext());
C.setNext(current.getPrev());
使用您的代碼,如果您發現一個出現, you
return
,這意味著自從您跳出該方法后,不會刪除其他實例。您可能需要一個新boolean removed
變量,即設置為false
、return true
更改為removed = true
和return false
更改為return removed
。

TA貢獻1777條經驗 獲得超3個贊
該方法在第一次遇到“e”后退出。
如果你想刪除'e'的所有實例,那么你應該有這樣的東西:
boolean listChanged = false;
while (dummy != null) {
if (dummy.getData() == e) {
// update list
...
listChanged = true;
}
...
}
return listChanged;

TA貢獻1818條經驗 獲得超8個贊
您可以嘗試使用以下代碼:
if (dummy.getData() == e) {
DIntNode temp = dummy.getPrevious();
temp.next = dummy.getNext();
temp = dummy.getNext();
temp.previous = dummy.getPrevious();
return true;
}
這使用了以前的參考。因此,前一個節點現在將引用您的虛擬節點的下一個節點(要刪除的節點)。同樣,虛擬節點的下一個節點將引用您的虛擬節點的前一個節點。因此,虛擬節點將從其雙向鏈接列表中失去其連接/鏈接,這就是我們想要的!
請試試。
添加回答
舉報