2. 两数相加
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
Example:
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
Explanation: 342 + 465 = 807.
判断好进位和空数组,数组长度不一致的情形即可
def addTwoNumbers(self,l1,l2):
result =[]
carry = False
index = 0
while True:
if index < len(l1) and index < len(l2):
result.append((l1[index]+l2[index])%10)
if carry:
result[-1] = result[-1] +1
carry = False
if (l1[index]+l2[index]) >= 10:
carry = True
index = index + 1
else:
break
while index < len(l1):
if carry:
tmp = 1 +l1[index]
result.append(tmp%10)
if tmp >= 10:
index += 1
else:
carry = False
result+=(l1[index+1:])
break
else:
result +=(l1[index:])
break
while index < len(l2):
if carry:
tmp = 1 +l2[index]
result.append(tmp%10)
if tmp >= 10:
index += 1
else:
carry = False
result.append(l2[index+1:])
break
else:
result +=(l2[index:])
break
return result
def addTwoNumbers(self, l1, l2):
if l1 == None: return l2
if l2 == None: return l1
flag = 0
dummy = ListNode(0); p = dummy
while l1 and l2:
p.next = ListNode((l1.val+l2.val+flag) % 10)
flag = (l1.val+l2.val+flag) / 10
l1 = l1.next; l2 = l2.next; p = p.next
if l2:
while l2:
p.next = ListNode((l2.val+flag) % 10)
flag = (l2.val+flag) / 10
l2 = l2.next; p = p.next
if l1:
while l1:
p.next = ListNode((l1.val+flag) % 10)
flag = (l1.val+flag) / 10
l1 = l1.next; p = p.next
if flag == 1: p.next = ListNode(1)
return dummy.next

浙公网安备 33010602011771号