4 回答
TA贡献1853条经验 获得超18个赞
你设置
dummy.getNext().setPrev(null);
但是前一个节点也引用了您尝试删除的下一个节点。您应该将此引用设置为下一个活动值。那是因为当您想获取所有链表时,前一个值仍然知道您删除的节点,因为下一个节点引用
TA贡献2065条经验 获得超13个赞
代码有两个问题:
当重新链接双向链表时,从 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;
}
这使用了以前的参考。因此,前一个节点现在将引用您的虚拟节点的下一个节点(要删除的节点)。同样,虚拟节点的下一个节点将引用您的虚拟节点的前一个节点。因此,虚拟节点将从其双向链接列表中失去其连接/链接,这就是我们想要的!
请试试。
添加回答
举报