You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 14:47:14