gpt4 book ai didi

python - 从双向链表中删除节点并保持位置不变

转载 作者:太空宇宙 更新时间:2023-11-03 17:54:57 25 4
gpt4 key购买 nike

我熟悉在 Python 中从双向链表中删除节点的一​​般方法,如下所示:

current.prev.next = current.next
current.next.prev = current.prev
current.next = None
current.prev = None

我在链表中​​间的某个位置有一个名为“当前”的节点。我的目标是删除节点并使新的“当前”节点成为其之后的节点。我已经编写了实现此目的的代码,但它留下了一些无用的引用。

current = current.next
current.prev.prev.next = current
current.prev = current.prev.prev

从这里开始,列表的顺序是正确的,并且没有引用指向已删除的节点,但已删除的节点仍然具有指向列表的 .next 和 .prev 引用。这对我来说似乎是糟糕的代码,但由于我没有任何对已删除节点的引用,所以我不知道如何访问它来删除它们。

这些引用有问题吗?如果是的话,解决办法是什么?

最佳答案

如果被删除的节点立即被垃圾收集,那么它的死链接就会消失并且不会引起问题。如果没有其他对它的引用,但它被保留(就像在 CPython 以外的解释器中一样),那么它的死引用将使 .prev 和 .next 保持事件状态,并且不会被 gc 处理,即使它们可能会被 gc 处理。如果有其他对该节点的引用,那么它的错误引用可能会出现问题。

对我来说,最简洁的过程是仅关注每个链接一次并按如下方式扩展您的代码。

next = current.next
prev = current.prev
prev.next = next
next.prev = prev
current.next = None
current.prev = None
current = next

如果您知道第 7 行会导致前一个当前节点被GC,则可以删除第 5 行和第 6 行。

关于python - 从双向链表中删除节点并保持位置不变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28615889/

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