解析:本題兩種方式解決
一種是算出兩數相加得出和,再轉化為鍊錶,但是這樣的話和可能會很大就回導致得到的和無法接受要用到long型別甚至long long型別;
另一種方式:我們可以注意到我們只需將兩個鍊錶同時遍歷相加將得到的和mod10即可插入到新的鍊錶中,但由於會和會大於10而進1所以我們要設定乙個變數carry用來攜帶進製的數;這樣我們把所有可能列出來如下:
1.鍊錶l1比鍊錶l2長,此時l2先結束遍歷,當然不能忘了carry
2.鍊錶l2比鍊錶l1長,此時l1先結束遍歷,當然還有carryif
((l2==null)
&&(l1!=null)
)
3.當l1和l2一樣長度或者在l1和l2不同長度的時候,前面的遍歷是l1和l2同時在遍歷,同時不能忘了carryif
((l1==null)
&&(l2!=null)
)
4.當全部遍歷完成,此時l1和l2均指向空,此時要盤查carryif
((l1!=null)
&&(l2!=null)
)
以上是在遍歷的時候會出現的四種情況,這四種情況要全部不相交,所以要加入else,讓他們不能並列執行,原因是l1和l2的指標遍歷;if
((l1==null)
&&(l2==null)
)}
但此時還不行,應為鍊錶的新建如果在此處的話會在最後生成乙個空值的節點,所以我們要判斷是否需要生成下乙個接收值的節點;
注意此處的if和上面的if並列存在,因為不管上面出現的是那種情況,都要去判斷是否生成新的節點。
以上我們最後得到的鍊錶result即為最終結果。if
((l1==null)
&&(l2==null)
&&(carry==0)
)else
附**:
/**
* definition for singly-linked list.
* public class listnode
* }*/class
solution
elseif(
(l1==null)
&&(l2!=null)
)elseif(
(l2==null)
&&(l1!=null)
)elseif(
(l1==null)
&&(l2==null))}
if((l1==null)
&&(l2==null)
&&(carry==0)
)else
}return result;
}}
leetcode演算法 兩數相加
這一次真的 了,寫了好久卻忽略了int溢位,還是官方的答案簡介直接 arithmetic the sum of two numbers name nanfang time 2019 12 22 content 這是我自己寫的,我是把數算出來然後加一起的 public static listnode ...
leetcode 兩數相加(演算法)
兩數之和 給定乙個整數陣列和乙個目標值,找出陣列中和為目標值的兩個數。你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。看到題目我首先想到的是將目標值 target 拆分,將目標值變成0 target,1 target 1 target 2 target target 2 由於第一次做演...
LeetCode 中級演算法 兩數相加
給定兩個非空鍊錶來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。示例 輸入 2 4 3 5 6 4 輸出 7 0 8原因 342 465 807一貫的愚蠢暴力解法 definition for...