逻辑是简单的,主要是处理进位,以及两序列长度不一致的情况;
Python
# 链表结点定义
class ListNode(object):
def __init__(self, x):
self.val = x
self.next = None
# 为链表添加新的元素
def addTail(l, node):
if l.next is None:
l.next = node
else:
p = l.next
while p.next:
p = p.next
p.next = node
class Solution(object):
def addTwoNumbers(self, l1, l2):
carrier = 0
x, y = l1.val, l2.val
if x+y>=10:
carrier = 1
l = ListNode(x+y-10)
else:
l = ListNode(x+y)
while l1.next and l2.next:
x, y = l1.next.val, l2.next.val
if x+y+carrier>=10:
addTail(l, ListNode(x+y+carrier-10))
carrier = 1
else:
addTail(l, ListNode(x+y+carrier))
carrier = 0
l1 = l1.next
l2 = l2.next
# 以下两个 while 循环处理长度不一致的情况
while l1.next:
if l1.next.val+carrier >= 10:
addTail(l, ListNode(l1.next.val+carrier-10))
carrier = 1
else:
addTail(l, ListNode(l1.next.val+carrier))
carrier = 0
l1 = l1.next
while l2.next:
if l2.next.val+carrier >= 10:
addTail(l, ListNode(l2.next.val+carrier-10))
carrier = 1
else:
addTail(l, ListNode(l2.next.val+carrier))
carrier = 0
l2 = l2.next
# 还有进位
if carrier == 1:
addTail(l, ListNode(1))
return l