力扣第二題之兩數相加清晰的解題思路

2021-10-06 12:25:48 字數 1452 閱讀 6757

給出兩個非空的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照逆序的方式儲存的,並且它們的每個節點只能儲存一位數字。

如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。

您可以假設除了數字 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 ...