【发布时间】:2020-05-15 15:40:47
【问题描述】:
[Python 3.8]
当删除链表中的节点时,next 节点可以简单地改变吗?
在这里,我们“删除”节点 1,只需更改指针即可。
来自 C++ 世界,这让我有点紧张。节点 1 的内存是否会自动回收,因为没有对其的引用?节点 1 到底发生了什么?
之前
[Sentinel] -> [Node 0] -> [Node 1] -> [Node 2] -> [Node 3] -> None
之后
[Sentinel] -> [Node 0] -┐ [Node 1] -┬-> [Node 2] -> [Node 3] -> None
└-----------┘
这是合法的吗?
最小、完整、可验证的示例
def delete(self, val):
n = self.sentinel
while n.next != None:
if n.next.data == val:
n.next = n.next.next # reassign pointer - no del, free, delete, or the like.
return
n = n.next
【问题讨论】:
-
是的,Python 有一个垃圾收集器,它最终会发现节点 1 没有被使用,并会释放它的内存。没什么好紧张的……除非你disable the garbage collector。
标签: python python-3.x linked-list