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

Python双向链表程序无限循环致编译器崩溃的原因排查

问题原因分析

问题出在add_before方法的指针赋值逻辑错误,导致链表节点间形成循环引用,最终触发无限循环。

具体来看add_before方法中的这段错误代码:

new_node.pref = n
new_node.nref = n.pref

这里把新节点的前驱(pref)和后继(nref)指针完全搞反了。正确的逻辑应该是:

  • 新节点的后继(nref)指向目标节点n
  • 新节点的前驱(pref)指向目标节点原来的前驱(n.pref)

当前错误的赋值逻辑会让新节点的pref指向目标节点n,nref指向n的旧前驱(在你的测试场景中,目标节点是30,它的旧前驱是None)。接着执行n.pref = new_node后,目标节点n的pref又指向新节点,形成了新节点↔目标节点的循环引用(新节点的pref是目标节点,目标节点的pref是新节点)。

当调用print_LL_reverse时,遍历到新节点40后,会通过n = n.pref回到30,接着又从30的pref回到40,如此往复陷入无限循环,最终导致编译器崩溃。

修复后的add_before方法
def add_before(self,data,x):
     if self.head is None:
        print("LL is empty , so Node cannot be added! ")        
     else:
         n = self.head
         while n is not None:
            if x==n.data:
                break
            n = n.nref
         if n is None:
            print("Node is not present in LL")
         else:                
             new_node = Node(data)
             # 修正指针赋值顺序
             new_node.nref = n
             new_node.pref = n.pref
             if n.pref is not None:
                n.pref.nref = new_node
             else:                   
                 self.head = new_node
             n.pref = new_node

内容的提问来源于stack exchange,提问作者Kavish Paraswar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 20:34:51