LeetCode 2 兩數相加(自己寫的)

2021-09-28 15:52:32 字數 1659 閱讀 1133

給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。

您可以假設除了數字 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 的範圍內,我們計算...