給出兩個非空的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照逆序的方式儲存的,並且它們的每個節點只能儲存一位數字。
如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。
您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。
示例:輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
輸出:7 -> 0 -> 8
原因:342 + 465 = 807
觀察題目,最重要的三個點已經為我們標註了出來,分別是非空、逆序、一位。那麼我們考慮的特殊情況就會少一些。
我們需要累積結果,遵循利用現有資源的目的,我們直接使用第乙個鍊錶l1作為結果鍊錶。(當然也可以使用第二個鍊錶,或者新建立乙個鍊錶)
我們對於可能出現的結果進行分析:
普通的相加
(4) + (1) = (5)
直接相加即可
進製的相加
(9) + (1) = (0 -> 1)
(9 -> 2) + (1 -> 3) = (0 -> 6)
當相加的數超過10,那麼將其減10之後的數放到第一位
第二位如果沒有結點,我們直接給l1新增乙個結點,鏈結到當前節點的後面即可。
第二位如果有數,那麼在第二位原數的基礎上加1
其中一方先結束
l2先結束。這種情況下,l1有可能會有進製和不進製兩種需要檢測自身,比如:
(9,9,9) + (1) = (0, 10, 9, 9)
此時,我們需要檢測目前的數是否大於10,大於則按照第2步的方法,直接向後一位加上即可。再檢測
(9,5,6) + (1) = (0, 6, 6)
檢測l1不為空的第乙個,小於10,不用檢測了,因為後面的資料都是給定的,不會大於10.
l1先結束,(這種情況下l2所有的值必然小於10,因為多於10的話看第2步,會自動給l1後面補1個結點的),那麼,我們需要記錄l1最後乙個不為空的結點,然後把l2的結點全部拷貝過來即可。
**如下:
class
solution
while
(l1 != null)
else
l1 = l1.next;
}while
(l2 != null)
return res;
}private
void
addition
(listnode l1, listnode l2)
else
}private
void
addonetonext
(listnode l)
else
}}
力扣第二題兩數相加
題目如下所示 給出兩個非空的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存一位數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2 4 3 5 6 4 ...
力扣第二題 兩數相加 python版本
題目描述 給出兩個非空的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照逆序的方式儲存的,且它們的每個節點只能儲存一位數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以0開頭。示例 輸入 7 4 3 5 6 4 輸出 2 1 ...
力扣刷題之兩數相加
題目 給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2 4 3 5 6 4 ...