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

LeetCode两数相加题递归Python解法标记行运行逻辑求解

核心代码行原理说明

标记的代码行内容如下:

x = node.val + 10 * toint(node.next) if node else 0

执行前提

首先明确LeetCode「两数相加」题目的链表规则:每个链表逆序存储一个整数的每一位,链表头节点存储整数的个位,第二个节点存储十位,以此类推。示例中2->4->3对应的整数就是342。

递归执行逻辑

递归函数的执行分为「向下调用」和「向上返回」两个阶段:先逐层调用到链表末尾的空节点,再从最内层开始逐层计算返回值。我们以示例中l1 = 2->4->3的toint(l1)调用为例,完整执行流程如下:

向下调用阶段(从链表头到尾)

  • 第一层调用:toint(节点2),node非空,需要先计算toint(node.next)即toint(节点4),当前层计算暂停
  • 第二层调用:toint(节点4),node非空,需要先计算toint(node.next)即toint(节点3),当前层计算暂停
  • 第三层调用:toint(节点3),node非空,需要先计算toint(node.next)即toint(None),当前层计算暂停
  • 第四层调用:toint(None),触发else分支,直接返回0

向上返回阶段(从链表尾到头)

  • 第三层拿到内层返回的0,计算x = 3 + 10 * 0 = 3,返回3给第二层
  • 第二层拿到内层返回的3,计算x = 4 + 10 * 3 = 34,返回34给第一层
  • 第一层拿到内层返回的34,计算x = 2 + 10 * 34 = 342,返回最终结果342

反转效果的实现逻辑

链表本身是低位在前、高位在后的逆序存储,递归先遍历到最后一个节点(对应整数的最高位),每向上返回一层,就把当前层的低位数字加到「高位部分数值*10」的结果上,刚好把逆序的链表节点拼接成了正常顺序的整数值,变相实现了链表的反转转整数。

你注释中提到的print(a)输出2、4、3,是因为a在进入函数时就打印,顺序是从链表头到尾;print(x)的输出对应递归返回时的顺序,实际是3、34、342,注释属于简化表述。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 18:27:03