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

LeetCode 2.两数相加:迭代构建链表的逻辑困惑求解

链表迭代构建逻辑解析(针对LeetCode 2.两数相加)

你疑惑的核心在于那个初始定义的节点是哑节点(dummy node)——它根本不是用来存有效结果的,只是个「锚点」,用来帮我们轻松拿到最终链表的头节点,避免处理空链表的边界情况。下面一步步拆解这个构建过程:

核心逻辑拆解

  1. 初始化阶段
    先创建一个空的哑节点(比如dummy = ListNode(0)),再定义一个移动指针current_node,让它一开始指向这个哑节点。同时初始化进位carry = 0。
    这里的哑节点就像一根绳子的起点,current_node就是我们手里捏着的绳头,负责往后续接新的绳段(结果节点)。

  2. 迭代构建阶段
    每次循环处理l1、l2的当前节点值,加上进位计算总和:

    • 算出当前位的数字(sum % 10)和新的进位(sum // 10)
    • 创建一个新节点存当前位的数字
    • 把current_node.next指向这个新节点——相当于在当前绳头后面接了一段新绳
    • 把current_node移动到这个新节点上——现在手里的绳头变成了刚接上的这段,下次就从这里继续接
  3. 最终返回
    循环结束后,哑节点的next指向的就是结果链表的第一个有效节点,直接返回dummy.next就行。

用示例走一遍流程(l1=[2,4,3], l2=[5,6,4])

  • 初始状态:dummy -> None,current_node = dummy
  • 第一次循环:2+5+0=7,进位0。创建节点7,current_node.next = 7,current_node移到7。此时链表:dummy -> 7
  • 第二次循环:4+6+0=10,当前位0,进位1。创建节点0,current_node.next = 0,current_node移到0。此时链表:dummy ->7 ->0
  • 第三次循环:3+4+1=8,进位0。创建节点8,current_node.next =8,current_node移到8。此时链表:dummy ->7 ->0 ->8
  • 循环结束,返回dummy.next,就是7->0->8,完全符合预期。

为什么不会是长度为2的链表?

你误以为长度不够,是把哑节点当成了有效节点。实际上哑节点不算在结果链里,我们每次都是在current_node的后面加新节点,然后current_node跟着往后走,相当于一直在链表的尾部追加新元素,迭代几次就会生成几个有效节点,最终结果链的长度就是迭代次数对应的有效节点数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 14:35:07