音乐
音乐
暂未播放
0:00/0:00
暂无歌词
LeetCode | 两数相加
575 字
3 分钟
LeetCode | 两数相加
分类:链表
题目#
给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
1输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]2输出:[8,9,9,9,0,0,0,1]讲解#
两个链表都是逆序存数字,个位对齐排在链表头部,所以可以直接从头到尾同步遍历,模拟竖式相加。
维护一个 carry 进位。每一步把两个链表当前节点的值加上进位得到 total,当前位存 total % 10,进位存 total // 10。
关键点:
ListNode(total % 10)创建一个新节点,值就是这一位的数字。cur.next = ...把新节点挂到cur后面,再cur = cur.next移到新节点,下一轮继续串。dummy是占位的空节点,不存有效数字。循环里每次挂出的节点都跟在它后面,所以最后return dummy.next就是返回结果链表的头。有了dummy,所有节点统一走cur.next = 新节点,不用单独处理头节点。- 两个链表长度可能不同,短的遍历完后按
0处理。 while条件带上carry,这样最后一位进位1也能被处理,不会丢。
复杂度#
- 逐位相加:
- 时间复杂度:
O(max(m, n)) - 空间复杂度:
O(1)(返回值不计)
- 时间复杂度:
代码#
源码#
1from typing import Optional2
3
4class ListNode:5 def __init__(self, val: int = 0, next: Optional['ListNode'] = None):6 self.val = val7 self.next = next8
9
10class Solution:11 def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:12 dummy = ListNode()13 cur = dummy14 carry = 015
16 while l1 or l2 or carry:17 n1 = l1.val if l1 else 018 n2 = l2.val if l2 else 019 total = n1 + n2 + carry20 carry = total // 1021 cur.next = ListNode(total % 10)22 cur = cur.next23 if l1:24 l1 = l1.next25 if l2:26 l2 = l2.next27
28 return dummy.next测试#
1def build_list(vals):2 dummy = ListNode()3 cur = dummy4 for v in vals:5 cur.next = ListNode(v)6 cur = cur.next7 return dummy.next8
9
10def to_list(head):11 res = []12 while head:13 res.append(head.val)14 head = head.next15 return res16
17
18sol = Solution()19
20assert to_list(sol.addTwoNumbers(build_list([2, 4, 3]), build_list([5, 6, 4]))) == [7, 0, 8]21assert to_list(sol.addTwoNumbers(build_list([0]), build_list([0]))) == [0]22assert to_list(sol.addTwoNumbers(build_list([9, 9, 9, 9, 9, 9, 9]), build_list([9, 9, 9, 9]))) == [8, 9, 9, 9, 0, 0, 0, 1]23assert to_list(sol.addTwoNumbers(build_list([5]), build_list([5]))) == [0, 1]24
25print("PASS")参考资料#
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
最后更新于 2026-08-21
部分内容可能已过时
相关文章智能推荐
1
LeetCode | 合并两个有序链表
LeetCodeLeetCode 合并两个有序链表题解:双指针遍历比较节点值,dummy 虚拟头节点串联结果链表。
2
LeetCode | 两数之和
LeetCodeLeetCode 两数之和题解:使用 Python 字典作为哈希表,在一次遍历中找到目标下标。
3
LeetCode | 反转链表
LeetCodeLeetCode 反转链表题解:使用迭代法逐个翻转节点指向,时间复杂度 O(n),空间复杂度 O(1)。
4
LeetCode | 相交链表
LeetCodeLeetCode 相交链表题解:使用哈希集合或长度差对齐法找到两个链表的相交起始节点。
5
LeetCode | 移动零
LeetCodeLeetCode 移动零题解:使用双指针原地移动零,同时保持非零元素相对顺序。
随机文章随机推荐
暂无随机文章
评论区
分享你的想法,与大家交流讨论
站点统计
文章
118
分类
20
标签
164
总字数
1,050,769
运行时长
0 天
最后活动
0 天前
最新动态
2026.09.04
过往皆是序章,前路漫有星光
2026.09.02
九月风至,赴约燕园
2026.07.06
岁次壬寅,序属季夏。负箧吴江,栖迟久泳。时维高考新败,登阊门而北望,临胥江以长嗟。昔者子安命蹇,尚能奋藻于滕阁;今吾才疏,岂可沉沦于吴市?乃焚膏以继晷,立雪而追贤。自暑月即研电学之微,探数理之奥。但求踔厉侪辈,砥砺锋芒。 洎乎素商既至,庠序始开。选修五门皆得满绩,总评冠绝同侪。然尘世难料,人心叵测。交非其人,悔吝丛生。一载相交,竟转瞬成参商。当是时也,恍若屈子见放,贾生受谗。然仲尼厄而作春秋,左丘眇而厥有国语。经此砥砺,竟愈宿疾:昔之曲意逢迎,今则坦荡自持;向之汲汲人言,今则泰然自若。所谓塞翁失马,焉知非福耶? 若夫玄冥司节,青阳启序。既专课业,复骋赛场。数模电赛,殚精竭虑;车赛集创,呕心镂骨。常观吴江夜月,每伴姑苏晨星。悬梁刺股,非为功名之累;凿壁囊萤,实怀鸿鹄之志。终使课业蝉联榜首,竞赛累获殊荣。然形神俱瘁,犹记寒宵病骨,强支案牍;伏暑昏眩,犹自深研不辍。 岁次甲辰,时逢白藏。绩点累年称冠,奖项盈箧成行。遂膺国奖之荣,如登龙门之津。乃遍谒名师,广求良策。拟鹏徙南冥,期凤鸣岐阳。幸得燕园李萌先生青眼,许列门墙。继入艾捷科芯实习,兼修毕业设计。两事交并,心力俱疲。承钟林峰师兄鼎力,终克难关。 今当辞别葑溪,将赴燕台。忆昔韩洪润学长,指迷津于暗夜;念吴圣洁挚友,伴苦读于寒窗。实乃天眷优渥,得遇诸君。昔者范公划粥,终成社稷之臣;欧母画荻,乃育文章之伯。予虽驽钝,敢不踵武前修?悟已往之不谏,知来者之可追。陶元亮归去来辞,实获我心;王子安穷且益坚,宁移素志?今将整装而北发,岂效楚囚之泣?当乘长风,破巨浪,展鸿图于未央!
日
一
二
三
四
五
六
文章目录
--
总访问量
--
访客数
公告
音乐
音乐
暂未播放
0:00/0:00
暂无歌词
站点统计
文章
118
分类
20
标签
164
总字数
1,050,769
运行时长
0 天
最后活动
0 天前
最新动态
2026.09.04
过往皆是序章,前路漫有星光
2026.09.02
九月风至,赴约燕园
2026.07.06
岁次壬寅,序属季夏。负箧吴江,栖迟久泳。时维高考新败,登阊门而北望,临胥江以长嗟。昔者子安命蹇,尚能奋藻于滕阁;今吾才疏,岂可沉沦于吴市?乃焚膏以继晷,立雪而追贤。自暑月即研电学之微,探数理之奥。但求踔厉侪辈,砥砺锋芒。 洎乎素商既至,庠序始开。选修五门皆得满绩,总评冠绝同侪。然尘世难料,人心叵测。交非其人,悔吝丛生。一载相交,竟转瞬成参商。当是时也,恍若屈子见放,贾生受谗。然仲尼厄而作春秋,左丘眇而厥有国语。经此砥砺,竟愈宿疾:昔之曲意逢迎,今则坦荡自持;向之汲汲人言,今则泰然自若。所谓塞翁失马,焉知非福耶? 若夫玄冥司节,青阳启序。既专课业,复骋赛场。数模电赛,殚精竭虑;车赛集创,呕心镂骨。常观吴江夜月,每伴姑苏晨星。悬梁刺股,非为功名之累;凿壁囊萤,实怀鸿鹄之志。终使课业蝉联榜首,竞赛累获殊荣。然形神俱瘁,犹记寒宵病骨,强支案牍;伏暑昏眩,犹自深研不辍。 岁次甲辰,时逢白藏。绩点累年称冠,奖项盈箧成行。遂膺国奖之荣,如登龙门之津。乃遍谒名师,广求良策。拟鹏徙南冥,期凤鸣岐阳。幸得燕园李萌先生青眼,许列门墙。继入艾捷科芯实习,兼修毕业设计。两事交并,心力俱疲。承钟林峰师兄鼎力,终克难关。 今当辞别葑溪,将赴燕台。忆昔韩洪润学长,指迷津于暗夜;念吴圣洁挚友,伴苦读于寒窗。实乃天眷优渥,得遇诸君。昔者范公划粥,终成社稷之臣;欧母画荻,乃育文章之伯。予虽驽钝,敢不踵武前修?悟已往之不谏,知来者之可追。陶元亮归去来辞,实获我心;王子安穷且益坚,宁移素志?今将整装而北发,岂效楚囚之泣?当乘长风,破巨浪,展鸿图于未央!



