给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例 1:
输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.
示例 2:
输入:l1 = [0], l2 = [0]
输出:[0]
示例 3:
输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
输出:[8,9,9,9,0,0,0,1]
提示:
- 每个链表中的节点数在范围
[1, 100]
内 0 <= Node.val <= 9
- 题目数据保证列表表示的数字不含前导零
- 创建一个新的链表保存两条链表的和,并给新链表创建一个哑节点dummy
- 遍历l1和l2这两条链表
- 如果其中一个链表遍历完成,但另一个链表未完成,需要把未遍历完成的链表也添加到新链表后(需要注意是否有进位值1)
# Definition for singly-linked list.
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
class Solution:
def addTwoNumbers(self, l1, l2):
# 创建一个哑节点
dummy = ListNode()
cur = dummy
# 记录两数和是否超过10
surplus = False
# l1或l2 不为空, 使用或条件的原因是要把l1、l2拼接到末尾
while l1 or l2:
rest = 1 if surplus else 0
x = l1.val if l1 else 0
y = l2.val if l2 else 0
value = x + y + rest
if value < 10:
surplus = False
else:
surplus = True
value = value % 10
# 创建新节点, 附在新链表的后面
new_cur = ListNode(value)
cur.next = new_cur
cur = cur.next
if l1:
l1 = l1.next
if l2:
l2 = l2.next
# 如果最后超过10,创建新节点,拼上
if surplus:
cur.next = ListNode(1)
return dummy.next