給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。
您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。
示例:
輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
輸出:7 -> 0 -> 8
原因:342 + 465 = 807
思路:
其實這道題主要是為了考察我們對鍊錶的熟練使用,演算法很簡單,逆序已經使得計算過程簡單了很多,鍊錶從左到右不就是個十百千位嗎,兩個指標直接從兩個鍊錶的開始直接遍歷就可以了。停止條件是什麼,當然是兩個給定鍊錶都被遍歷完為止,即兩個指標均為none。
接下來考慮一些特殊情況:
1、對應位數字相加大於10要進製,所以要設定乙個變數來儲存進製數。
2、兩個鍊錶長度不一致,繼續遍歷就會報錯了,因為短鍊表指標為none值了啊。此時我們只需要給短的鍊錶後面掛上乙個值為0的結點就可以了繼續了。就好象下圖:
3、最高位相加大於十,也要進製,這個肯定不能加在迴圈裡,只能在最後判斷,兩個給定鍊錶都遍歷完了,如果儲存進製數的變數不等於0,就需要在儲存結果的鍊錶中再掛乙個節點,值設定為1也就是進製變數就可以了。
4、最後記得要加頭指標便於輸出。
**如下:
class
listnode
: def __init__
(self, x)
: self.val = x
self.next = none
class
solution
: def addtwonumbers
(self, l1, l2)
: # l
=listnode
(x=0
) l =
listnode
(x=0
) prenode =
listnode
(x=0)l
=prenode
a =0while l1 or l2:
if not l1: l1 = l
if not l2: l2 = l
l.next =
listnode
((l1.val + l2.val + a)%10
) a=
(l1.val + l2.val + a)
//10
l1 = l1.next
l2 = l2.next
l=l.next
if a>0:
l.next=
listnode
(a)return prenode.next
def printlist
(l:listnode)
->listnode:#輸出結果鍊錶的函式,提交的時候不需要寫,用來測試的。
while l:
print
(l.val)
l=l.next
LeetCode2 兩數相加
嗯。今天兩個簡單題,我可能要墮落了 先貼第乙個 給定兩個非空鍊錶來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。示例 輸入 2 4 3 5 6 4 輸出 7 0 8原因 342 465 807...
LeetCode 2 兩數相加
題目 給定兩個非空鍊錶來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。示例 輸入 2 4 3 5 6 4 輸出 7 0 8 原因 342 465 807 解題 這題就比較簡單了,兩數相加處理好...
LeetCode 2 兩數相加
題目描述 給定兩個非空鍊錶來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。題目思路 先從最低有效位也就是列表 l1 和 l2 的表頭開始相加。由於每位數字都應當處於 0 9 的範圍內,我們計算...