leetcode之兩數相加
給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。
如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。
您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。
示例:輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
輸出:7 -> 0 -> 8
原因:342 + 465 = 807
我剛開始是想把兩個鍊錶轉化為數字,相加後再轉鍊錶。發現難度過大,且要考慮的東西很多然後也不知道咋做了。一番思想鬥爭後還是看題解了qaq…
思路
標籤:鍊錶
將兩個鍊錶看成是相同長度的進行遍歷,如果乙個鍊錶較短則在前面補 000,比如 987 + 23 = 987 + 023 = 1010
每一位計算的同時需要考慮上一位的進製問題,而當前位計算結束後同樣需要更新進製值
如果兩個鍊錶全部遍歷完畢後,進製值為 111,則在新鍊錶最前方新增節點 111
小技巧:對於鍊錶問題,返回結果為頭結點時,通常需要先初始化乙個預先指標 pre,該指標的下乙個節點指向真正的頭結點head。使用預先指標的目的在於鍊錶初始化時無可用節點值,而且鍊錶構造過程需要指標移動,進而會導致頭指標丟失,無法返回結果。
看了會差不多理解了,就開始寫了,期間遇到乙個問題是跳不出迴圈,在以下**中我以注釋形勢解釋。
class solution
if(l2 != null)
}if(carry == 1 )
return pre.next;
}}
這樣就通過了,具體思路題解已經很完善了,基本是可以理解的。就是進行加運算直接轉換為目標鍊錶,相信大家都可以理解的。
這是第一次寫部落格,希望以後可以多多學習,多寫部落格,多積累,真正轉化為自己的東西吧,就這樣。
LeetCode之兩數相加
給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2 4 3 5 6 4 輸出 7...
leetcode之兩數相加
給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。輸入 2 4 3 5 6 4 輸出 7 0...
leetcode之兩數相加
這題每用到什麼特殊的演算法,直接上 definition for singly linked list.class listnode def init self,val 0,next none self.val val self.next next class solution def addtwo...