题目描述
思路解析动画文字版
两个指针同时走,每位算 a + b + carry:结果对 10 取余是这一位的数字,整除 10 是进位带到下一位。哪条短了就当它是 0。最后如果还有进位,再补一个节点。
起步 · 指针对齐个位:两个指针 p 同时停在两条链的表头(个位)。进位 carry=0,结果链表还空着(虚线占位)。逆序存的好处:表头就是个位,直接从这里开始竖式加。
个位 · 2 + 5 + 0 = 7:个位:a+b+carry = 2+5+0 = 7,没满十。本位 7 = 7%10,进位 carry = 7//10 = 0。tail.next = ListNode(7),结果链表长出第一个节点 7,tail 指向它。
十位 · 指针前移:两个输入指针各往前走一格,来到十位 4 和 6(个位已结算,标灰)。结果链表的 tail 仍停在 7。
十位 · 4 + 6 + 0 = 10 → 满十进一:十位:4+6+0 = 10,满十了!本位写 10%10 = 0,进位 carry = 10//10 = 1 带到下一位。结果链表接上 0,tail 前移。这一步的进位是最容易漏的地方。
百位 · 指针前移(别忘 carry=1):输入指针走到百位 3 和 4。注意手里还攥着上一位的进位 carry=1,这一位相加时要带上它。
百位 · 3 + 4 + 1 = 8:百位:3+4+carry(1) = 8,没满十。本位 8,进位归 0。结果链表长出第三个节点 8:7 → 0 → 8。
两条都走完 · 查最后的进位:两条输入链都走到头,指针变空。最后再看一眼 carry:这里 carry=0,不用补。如果它是 1(比如 5+5=10),还得再给结果链表接一个值为 1 的节点——这正是循环条件要带 carry 的原因。
完成:逐位相加、满十进一,返回的结果链表 7 → 0 → 8,就是 342 + 465 = 807。
链表竖式加法的三件套:逐位 divmod 取「本位/进位」、短的补 0、哨兵起头。循环条件写成 l1 or l2 or carry 是优雅收尾的关键。
迁移阶梯:把这题练到能复述后,再去同类题里迁移:先复用状态定义,再调整边界条件。可以让小欧把这套「哨兵 + 进位」骨架陪你默写一遍。
边界三连:边界三连:极端输入先过一遍。
几个高频追问,记住答法。
参考代码
class Solution: def addTwoNumbers(self, l1, l2): dummy = ListNode(0) cur = dummy carry = 0 while l1 or l2 or carry: x = l1.val if l1 else 0 y = l2.val if l2 else 0 carry, digit = divmod(x + y + carry, 10) cur.next = ListNode(digit) cur = cur.next l1 = l1.next if l1 else None l2 = l2.next if l2 else None return dummy.next复杂度
- 时间复杂度:O(max(m,n)),按较长的位数走
- 空间复杂度:O(max(m,n)),结果链表长度
可套用的代码模板
别背具体语言的写法,背这七步骨架:哨兵起头 → 循环带进位 → 短的补 0 → 和拆「进位//本位」 → 接尾 → 双指针后移 → 跳哨兵返回。换成字符串相加、大数相加,把「节点」换成「下标」就行。
# ① 哨兵起头,省掉「第一个节点」的特判dummy = tail = 新节点(); carry = 0# ② 循环条件三件:A 没走完 或 B 没走完 或 还有进位while (A 还在) or (B 还在) or (carry 非 0): # ③ 短的那条当 0 s = (A 在?取A.val:0) + (B 在?取B.val:0) + carry # ④ 一次拆出「进位」和「本位」 carry, digit = s // 10, s % 10 # ⑤ 本位接到尾巴,尾巴前移 tail.next = 新节点(digit); tail = tail.next # ⑥ 两条各自前移(走完了就保持空) A = A.next if A else None; B = B.next if B else Nonereturn dummy.next # ⑦ 跳过哨兵易错点
面试追问把动画讲成自己的话
追问为什么逆序存反而方便?
追问结束后还有进位怎么办?
追问dummy 头节点的好处?
这道题到这就讲完了。动画和文字是同一套思路——别光看,关掉页面自己默写一遍。然后顺着主线继续:
环形链表
LeetCode 141 · 简单 · 沿着 链表 继续往下推进
把这道题真正学会,再走
图解算法年卡 ¥99 /年
- ✓本题每步动画的吴师兄语音讲解(全站陆续覆盖)
- ✓小欧带 8 步通关训练——追问到不看答案也能写对、能 30 秒讲给面试官听
- ✓学习报告,记录每道题的掌握程度
76k+ GitHub Star · 吴师兄开源图解算法,几十万开发者在看的算法讲解
想成体系刷透这类套路?去图解算法专题