這是一道來自leetcode的演算法題目。
給出兩個非空的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照逆序的方式儲存的,並且它們的每個節點只能儲存 一位 數字。
如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。
您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。
示例:
輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)和基礎的四則運算的思路一樣,由於是逆序方式儲存的單數字,從頭節點同時開始遍歷鍊錶,即從個位開始相加,還要注意進製問題,可以用乙個標記整數變數carry,carry為0即不進製。輸出:7 -> 0 -> 8
原因:342 + 465 = 807
建立結果頭節點,建立兩個新指標p,q分別指向已知鍊錶;
初始化標記進製的變數carry為0;
判斷p,q是否不全為空,是則進入迴圈,遍歷鍊錶,即進行第4步,否則跳出迴圈,即進行第8步;
建立兩個變數x,y,如果當前節點為空(null)則變數賦為0,否則賦予當前節點的值(val);
建立乙個臨時變數sum,sum=x+y+carry;
判斷是否需要進製,實際過程中carry=sum/10即可解決,不需判斷是否大於10;
指向下一節點,進行第3步;
判斷是否需要再進製;
返回結果;
/**
* definition for singly-linked list.
* */
public
class
listnode
}class
solution
if(carry>0)
return result.next;
}}
# definition for singly-linked list.
class
listnode
:def
__init__
(self, x)
: self.val = x
self.
next
=none
class
solution
:def
addtwonumbers
(self, l1: listnode, l2: listnode)
-> listnode:
dummyhead = listnode(0)
curr, carry = dummyhead,
0while l1 or l2:
sum=
0if l1:
sum+= l1.val
l1 = l1.
next
if l2:
sum+= l2.val
l2 = l2.
next
sum+= carry
carry =
sum//
10 curr.
next
= listnode(
sum%10)
curr = curr.
next
if carry >0:
curr.
next
= listnode(1)
return dummyhead.
next
;
Leetcode騰訊精選練習2
原題 兩個大小為 m 和 n 的排序陣列 nums1 和 nums2 請找出兩個排序陣列的中位數並且總的執行時間複雜度為 o log m n 示例 1 nums1 1,3 nums2 2 中位數是 2.0 示例 2 nums1 1,2 nums2 3,4 中位數是 2 3 2 2.5 看到這題目自然...
Leetcode騰訊精選練習04
原題 leetcode7 給出乙個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。示例 1 輸入 123 輸出 321 示例 2 輸入 123 輸出 321 示例 3 輸入 120 輸出 21 注意 假設我們的環境只能儲存得下 32 位的有符號整數,則其數值範圍為 231,231 1...
Leetcode騰訊精選練習05
請你來實現乙個atoi函式,使其能將字串轉換成整數。首先,該函式會根據需要丟棄無用的開頭空格字元,直到尋找到第乙個非空格的字元為止。當我們尋找到的第乙個非空字元為正或者負號時,則將該符號與之後面盡可能多的連續數字組合起來,作為該整數的正負號 假如第乙個非空字元是數字,則直接將其與之後連續的數字字元組...