題目:給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭
示例:輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
輸出:7 -> 0 -> 8
原因:342 + 465 = 807
從最低位開始相加,由於每可能會出現「溢位」,於是引入進製 carryclass
solution
:def
addtwonumbers
(self, l1, l2)
:"""
:type l1: listnode
:type l2: listnode
:rtype: listnode
"""re = listnode(0)
r=re
carry=
0while
(l1 or l2)
: x= l1.val if l1 else
0 y= l2.val if l2 else
0 s=carry+x+y
carry=s//
10 r.
next
=listnode(s%10)
r=r.
next
if(l1!=
none
):l1=l1.
next
if(l2!=
none
):l2=l2.
next
if(carry>0)
: r.
next
=listnode(1)
return re.
next
1.將當前結點初始化為返回列表的啞結點,將第一次迭代時的進製 carry 初始化為 0
2.檢查l1和l2,當有乙個非空時進入迴圈,並遍歷列表 l1和 l2 直至到達它們的尾端
3.當l1非空時將 x設為l1的頭結點值。當x遍歷到達 l1 的末尾,則將其值設定為0。當l2非空時將 y設為l2頭結點的值。當y 遍歷到達 l2的末尾,則將其值設定為 0
4.設sum = x + y + carry
則新進製的值:carry = sum // 10
建立乙個數值為 (sum %10)的新結點,並將其設定為當前結點的下乙個結點,然後將當前結點前進到下乙個(新設定)結點
5.繼續判斷迴圈條件,若滿足,則將x,y分別前進到l1和l2下一結點
1.考慮兩個相加列表長度可能不同,將迴圈條件設為l1或l2仍未空
2.python3中取整符號為: / /
o (max(m,n)) m,n分別為l1和l2的長度
LeetCode 兩數相加
題目來自leetcode 注意幾點 鍊錶對應結點相加時增加前乙個結點的進製,並儲存下乙個結點的進製 兩個鍊錶長度不一致時,要處理較長鍊錶剩餘的高位和進製計算的值 如果最高位計算時還產生進製,則還需要新增乙個額外結點。definition for singly linked list.struct l...
leetcode 兩數相加
給定兩個非空鍊錶來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭.示例 輸入 2 4 3 5 6 4 輸出 7 0 8 原因 342 465 807 definition for singly ...
leetcode 兩數相加
給定兩個非空鍊錶來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。示例 輸入 2 4 3 5 6 4 輸出 7 0 8原因 342 465 807 definition for singly l...