gpt4 book ai didi

Java - 手动链表,删除当前节点

转载 作者:行者123 更新时间:2023-11-29 03:16:57 24 4
gpt4 key购买 nike

所以我从头开始实现了一个链表,并试图删除当前节点(光标)。当我运行程序并尝试删除当前节点时,我没有收到任何错误,但随后我将尝试打印当前节点(现在应该是下一个或上一个节点)并打印应该打印的节点'已被删除。

最佳答案

首先,这一行没有意义:

// ...
}else{
cursor = cursor.getPrev().getNext(); // THIS LINE - all you say here is 'cursor = cursor'
cursor = cursor.getNext();
}
// ...

您可能希望断开前一个节点指向光标的连接,并使其指向光标之后的节点:

// get previous node and set its next to node after cursor
cursor.getPrev().setNext(cursor.getNext());

这部分:

if(cursor.getNext() == null){ //it's the tail
tail = cursor.getPrev();
}

您永远不会通过说 tail.next = null 来断开 tail.next,所以您的 tail.next 将指向 cursor 更新后。

然后这一行:

else{
cursor = cursor.getNext().getPrev(); // again no effect
cursor = cursor.getPrev();
}

应该看起来像:

// get next node and set its prev to node before cursor
cursor.getNext().setPrev(cursor.getPrev());

总的来说,您的逻辑似乎比应有的复杂得多。这是一种简化代码但不改变逻辑的方法(仍然使用游标节点)

您可以稍微重新排列您的 if 语句以使事情更清楚。您应该先检查边缘情况(头部和尾部),然后再检查其余情况:

if (cursor != null){
if(cursor.getPrev() == null){ //it's the head
head = cursor.getNext();
head.setPrev(null); // disconnect the head from current node
} else if (cursor.getNext() == null) { // it's the tail
tail = cursor.getPrev();
tail.setNext(null); // disconnect the tail from current node
} else { // regular node
Node prev = cursor.getPrev();
prev.setNext(next); // connect previous node to next node
Node next = cursor.getNext();
next.setPrev(prev); // connect next node to previous node

}
// this part isn't necessary because we are skipping the cursor node
// so nothing in the list references to it anymore
// however it is a good safety measure and it helps the GC a bit
cursor.setPrev(null); // disconnect cursor from previous node
cursor.setNext(null; // disconnect cursor from next node
}

我省略了游标的更新,因为当游标位于中间节点上并且您将其删除时会出现模棱两可的情况。问题是您如何决定将光标更新为 prevnext

你并不真的需要光标,但我已经把这个答案塞满了很多所以我会给你 this linkthis link检查它是否有一些好的想法。

就格式化您的长版打印品而言:

如果您使用的是 Eclipse,您可以在 Windows 上使用 Ctrl-Shift-F 或在 Mac 上使用 Cmd-Shift-F 来自动格式化您的代码:)

关于Java - 手动链表,删除当前节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25985892/

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