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

教程复制的Python链表remove函数失效,指针修改逻辑疑问

问题解答

1. remove方法失效原因

你遇到的问题是缩进错误导致的,属于代码编写时的低级失误,和删除逻辑本身无关。
原代码中return False的缩进层级是在while循环内部,这会导致:
第一次循环判断根节点(值为12)和待删除值8不相等后,执行完指针后移逻辑就会直接返回False,整个循环仅执行1次,根本不会遍历到存储8的第二个节点,自然不会执行self.size -=1的逻辑。
正确的写法是将return False调整到和while同级,也就是整个循环遍历完所有节点都没找到目标值时,才返回False:

def remove(self, d):
    this_node = self.root
    prev_node = None

    while this_node is not None:
        if this_node.data == d:
            if prev_node is not None:
                prev_node.next_node = this_node.next_node
            else:
                self.root = this_node.next_node
            self.size -=1
            return True
        else:
            prev_node = this_node
            this_node = this_node.next_node
    # 注意return False的缩进位置,和while对齐
    return False

修改后执行删除8的操作,size就会正常变为2。


2. next_node的引用逻辑

next_node是Node类的内置实例属性,不需要在remove方法中额外赋值:

  • 定义Node类的__init__方法时,就已经声明了next_node属性,用于存储当前节点指向的下一个节点的引用。
  • 调用add()方法添加节点时,创建新Node实例会直接把当前链表的root作为next_node参数传入,节点加入链表的同时就完成了后继关系的绑定,所有节点的next_node属性在添加时就已经完成赋值。
  • 遍历链表时只需要顺着已经绑定好的next_node指针逐个访问即可,不需要在遍历/删除方法中重复赋值。

内容的提问来源于stack exchange,提问作者Geomatrix Gamer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 17:48:02