gpt4 book ai didi

java - 循环链表删除节点

转载 作者:行者123 更新时间:2023-12-01 14:30:56 27 4
gpt4 key购买 nike

我不确定这是否是为我的循环列表创建删除方法的正确方法,而且我在让它适用于 1 个节点列表时也遇到了问题。

public void remove() {
if(first.getNext() == null) {
first = null;
first.setNext(null);
} else {
Node current = first;
for(int i = 0; i < getSize() - 1; i++) {
current = current.getNext();
}
first = first.getNext();
current.setNext(first);
size--;
}
}

对于大于两个的列表,我可以正常工作,但我不确定这是否是解决该问题的最佳方法。有没有人对改进这一点以及获取一个节点列表以正确删除的方法有任何建议?即使我将第一个节点设置为 null,并将下一个节点也设置为 null,它仍然返回我的原始输入。

编辑:对于将来看到此内容的任何人,我刚刚打印了一条消息,指出您无法删除该元素。因为我的任务对于要做什么非常模糊。

最佳答案

这行不通。我想,它根本无法执行以下部分:

    first = null;
first.setNext(null);

原因是这会引发 NullpointerException。您首先将 first 设置为 null,然后尝试取消引用 null

我不会向您提供确切的代码(因为这是某种家庭作业,对吗?;)),但请从维基百科( http://en.wikipedia.org/wiki/Doubly_linked_list )检查此伪代码:

  function remove(List list, Node node)
if node.prev == null
list.firstNode := node.next
else
node.prev.next := node.next
if node.next == null
list.lastNode := node.prev
else
node.next.prev := node.prev
destroy node

关于java - 循环链表删除节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16862411/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com