將兩個鍊錶看成是相同長度的進行遍歷,如果乙個鍊錶較短則在前面補 0,比如987 + 23 = 987 + 023 = 1010
每一位計算的同時需要考慮上一位的進製問題,而當前位計算結束後同樣需要更新進製值
如果兩個鍊錶全部遍歷完畢後,進製值為 1,則在新鍊錶最前方新增節點 1
小技巧:對於鍊錶問題,返回結果為頭結點時,通常需要先初始化乙個預先指標 pre,該指標的下乙個節點指向真正的頭結點head。使用預先指標的目的在於鍊錶初始化時無可用節點值,而且鍊錶構造過程需要指標移動,進而會導致頭指標丟失,無法返回結果。
class solution:
def addtwonumbers(self, l1: listnode, l2: listnode) -> listnode:
pre = listnode(-1) #預先指標
cur = pre
carry = 0
while l1 or l2:
x = l1.val if l1 else 0
y = l2.val if l2 else 0
s = x + y + carry
carry = s //10 #計算進製
cur.next = listnode(s % 10)
cur = cur.next
if l1:
l1 = l1.next
if l2:
l2 = l2.next
if carry > 0: #最後仍有進製,則加上乙個進製節點
cur.next = listnode(carry)
return pre.next
2 兩數相加
平均星級 4.45 239次評分 2018年2月2日 28.6k次 預覽 給定兩個非空鍊錶來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。示例 輸入 2 4 3 5 6 4 輸出 7 0 8 ...
2 兩數相加
給定兩個非空鍊錶來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。示例 輸入 2 4 3 5 6 4 輸出 7 0 8原因 342 465 807 definition for singly l...
2 兩數相加
給定兩個非空鍊錶來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。示例 輸入 2 4 3 5 6 4 輸出 7 0 8 原因 342 465 807演算法 我們首先從最低有效位也就是列表 l1和...