題目描述:
給定兩個(gè)非空鏈表來(lái)表示兩個(gè)非負(fù)整數(shù)。位數(shù)按照逆序方式存儲(chǔ)蕊程,它們的每個(gè)節(jié)點(diǎn)只存儲(chǔ)單個(gè)數(shù)字椒袍。將兩數(shù)相加返回一個(gè)新的鏈表。
你可以假設(shè)除了數(shù)字 0 之外藻茂,這兩個(gè)數(shù)字都不會(huì)以零開頭驹暑。
示例:
輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
輸出:7 -> 0 -> 8
原因:342 + 465 = 807
考慮情況
測(cè)試用例 | 說(shuō)明 |
---|---|
l1=[0,1], l2=[0,1,2] | 當(dāng)一個(gè)列表比另一個(gè)列表長(zhǎng)時(shí)。 |
l1=[] , l2=[0,1] | 當(dāng)一個(gè)列表為空時(shí)辨赐,即出現(xiàn)空列表优俘。 |
l1=[9,9] , l2=[1] | 求和運(yùn)算最后可能出現(xiàn)額外的進(jìn)位,這一點(diǎn)很容易被遺忘 |
因?yàn)?+9 +1 位19 不可能進(jìn)位是2 所以:
# Definition for singly-linked list.
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
class Solution:
def addTwoNumbers(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
if l1 is None:
return l2
if l2 is None:
return l1
tmp = ListNode(0)
res = tmp
flag = 0
while l1 or l2:
tmpsum = 0
if l1:
tmpsum = l1.val
l1 = l1.next # 為下一次的取和做準(zhǔn)備
if l2:
tmpsum += l2.val
l2 = l2.next
tmpnum = ((tmpsum + flag) % 10) # 取個(gè)位值
flag = ((tmpsum + flag) // 10 ) # 看是否進(jìn)位
res.next = ListNode(tmpnum)
res = res.next
if flag:
res.next = ListNode(1)
res = tmp.next
del tmp
return res