关于Python链表deletion方法中指定代码行的逻辑疑问
LinkedList类deletion方法疑问解析
我正在学习一本数据结构书籍,书中实现了包含相关方法的LinkedList类,我对其中的deletion方法存在疑问。代码如下:
def deletion(self, index): current_node = self.first_node current_index = 0 if index == 0: self.first_node = self.first_node.next_node else: while current_index < (index - 1): current_node = current_node.next_node current_index += 1 current_node.next_node = current_node.next_node.next_node
我具体困惑的是current_node.next_node = current_node.next_node.next_node这行代码。按我的理解,当传入index=3时,while循环结束后current_node应处于索引2的位置,此时执行该行代码是将索引2节点的next指向索引4节点,这似乎未达成删除索引3节点的目的,但实际运行有效。请问是我计数错误还是另有原因?
你的理解完全没错,把索引2节点的next指向索引4,这就是删除索引3节点的正确操作。
链表的核心是靠节点间的next指针串联,索引3的节点能存在于链表中,全靠索引2节点的next指向它。一旦把索引2节点的next改成指向索引4,索引3的节点就彻底和链表主体断开了——从链表头节点出发,再也遍历不到它。在Python里,这种没有被任何引用指向的节点会被垃圾回收机制自动清理,相当于完成了删除。
举个直观的例子:
- 原链表:节点0 → 节点1 → 节点2 → 节点3 → 节点4
- 删除index=3时,current_node停在节点2
- 执行那行代码后,节点2的
next从节点3切换到节点4 - 最终链表:节点0 → 节点1 → 节点2 → 节点4,节点3被孤立,自然就被“删除”了
你觉得不对劲,可能是误以为要主动销毁节点,但链表的删除逻辑本来就是这样——切断连接即可,不需要额外销毁操作。
内容的提问来源于stack exchange,提问作者TEOTU
相关产品推荐
相关产品推荐

