这题是比较经典的,看的LeetCode刷题视频中都有提到
newHead = ListNode(0) # 创建一个新的链表
newP = newHead
p1, p2 = l1, l2
while p1 or p2:
# 1. 找到操作数 a, b , 进位 jin, 并计算当前计算的进位
a = p1.val if p1 else 0 # 获取p1
b = p2.val if p2 else 0 # 获取p2
div = (a + b + newP.val) % 10 # 考虑进制 newP.val
jin = (a + b + newP.val) // 10
# 2. 更新指针后移, 要注意 p1, p2 为 None的判断,不可前移
if p1: p1 = p1.next
if p2: p2 = p2.next
# 3. 赋值
newP.val = div
# 4. 判断是否需要创建新节点
if p1 or p2 or jin > 0:
newP.next = ListNode(jin) # 当jin >0 ,创建的是含值的
newP = newP.next
return newHead