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

Python 3自定义链表遍历异常:仅能遍历到第二个节点

自定义链表遍历仅到第二个节点的问题排查与修复

问题核心原因

你的链表构建逻辑完全错误:在list_node_builder方法中,每次创建节点时,next_node参数传入的是全新创建的孤立节点,而非链表中真正的下一个节点。

比如处理l1=["a","b","c"]时:

  • 创建a节点时,next_node是ListNode("b")(这个b节点的next_node是默认的None)
  • 后续循环创建b节点时,是另一个全新的ListNode("b"),和a指向的那个b没有任何关联
  • 最终你的"链表"实际上是一串独立节点,每个节点只指向一个存了下一个值但无后续链接的孤立节点,自然遍历到第二个节点就会终止。

修复后的代码

正确的链表构建方式应该从尾到头,或者从头开始依次串联已创建的节点:

from typing import Optional

class ListNode:
    def __init__(self, val, next_node=None):
        self.val = val
        self.next_node = next_node

    @property
    def value(self):
        return self.val

    def __str__(self):
        return f"Value={self.val}, Next node available={self.next_node.value if self.next_node != None else -1}"

class Solution:
    def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[list]:
        result_arr = []
        curr_node = l1

        print("***** Start traversing L1 only ******")
        while curr_node:
            print(curr_node)
            result_arr.append(curr_node.val)
            curr_node = curr_node.next_node
        print("***** End traversing L1 only ******")
        return result_arr

    def list_node_builder(self, l1: list[str], l2: list[int]) -> list[int]:
        print("***** Start building Linked List ******")
        
        # 正确构建L1链表:倒序遍历,从最后一个节点开始串联
        l1_head = None
        for num in reversed(l1):
            l1_head = ListNode(num, l1_head)
            print(l1_head)
        
        # 同理构建L2链表
        l2_head = None
        for num in reversed(l2):
            l2_head = ListNode(num, l2_head)

        print("***** Done building Linked List ******")
        return self.addTwoNumbers(l1_head, l2_head)

修复说明

  1. 链表构建逻辑修正:通过倒序遍历输入列表,每次将新节点的next_node指向已构建好的链表头部,最终形成完整串联的链表。
  2. 遍历逻辑简化:直接用curr_node是否为None作为循环条件,无需额外的l1_running变量,代码更简洁可靠。
  3. 移除错误的__dict__赋值:原代码中__dict__ = ("val", "next_node",)会破坏类实例的属性访问逻辑,已移除。

运行验证

修复后调用原测试代码,遍历会输出所有节点:

***** Start building Linked List ******
Value=g, Next node available=-1
Value=f, Next node available=g
Value=e, Next node available=f
Value=d, Next node available=e
Value=c, Next node available=d
Value=b, Next node available=c
Value=a, Next node available=b
***** Done building Linked List ******
***** Start traversing L1 only ******
Value=a, Next node available=b
Value=b, Next node available=c
Value=c, Next node available=d
Value=d, Next node available=e
Value=e, Next node available=f
Value=f, Next node available=g
Value=g, Next node available=-1
***** End traversing L1 only ******
['a', 'b', 'c', 'd', 'e', 'f', 'g']
['a', 'b', 'c', 'd', 'e', 'f', 'g']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 23:53:19