Leetcode 445
解题思路:从前往后做加法,使用一个数组来保存可能需要进位的节点。如果该节点不为9,则清空数组,只保留该节点,否则均需要保留。
class Solution(object):
def addTwoNumbers(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
if l1 is None and l2 is not None:
return l2
if l1 is not None and l2 is None:
return l1
if l1 is None and l2 is None:
return None
n1 = self.len(l1)
n2 = self.len(l2)
if n1 < n2:
return self.addTwoNumbers(l2, l1)
diff = n1 - n2
p = ListNode(0)
r = p
pre = []
pre.append(p)
for i in range(diff):
p.next = ListNode(l1.val)
if p.next.val == 9:
pre.append(p.next)
elif p.next.val < 9:
pre = []
pre.append(p.next)
p = p.next
l1 = l1.next
for i in range(n2):
val = l1.val + l2.val
p.next = ListNode(val % 10)
if val >= 10:
for t in pre:
t.val = (t.val + 1) % 10
pre = []
pre.append(p.next)
elif val == 9:
pre.append(p.next)
elif val < 9:
pre = []
pre.append(p.next)
l1 = l1.next
l2 = l2.next
p = p.next
if r.val == 0:
r = r.next
return r
def len(self, l):
if l is None:
return 0
count = 0
while l is not None:
count += 1
l = l.next
return count