LeetCode2 兩數相加

2021-10-23 06:10:35 字數 1533 閱讀 1472

連線

·亞節點兩個節點指向兩條鍊錶,遍歷即可

//對於鍊錶問題,返回結果為頭節點時,

//通常需要先初始化乙個預先指標pre,該指標的下乙個節點指標指向真正的頭結點head,

//使用預先指標的目的在於鍊錶初始化時無可用節點值,而且鍊錶構造過程需要指標移動,進而導致頭指標丟失

//無法返回結果

public listnode addtwonumbers

(listnode l1, listnode l2)

//如果鍊錶全部遍歷完畢,進製值為1,則在新鍊錶最前方新增節點

if(carry ==1)

return pre.next;

}

//採用遞迴

/** * 寫遞迴的時候注意遞迴函式的兩個條件,遞迴出口條件,以及函式內需要做什麼?

* 1、遞迴出口條件:鍊錶a鍊錶b都為空shi

* 2、將兩個鍊錶的值相加,再賦值給鍊錶a

* 這裡需要注意第二個條件,因為進製標誌需要通告下一層遞迴函式,所以需要乙個單獨的變數作為記錄

* 函式內部的進製標誌判斷和迭代版本類似的

* 呼叫下一層遞迴的時候,傳遞的引數是a.nexy和b.mexy

* 這裡還需要注意乙個細節,如果a,b兩個鍊錶不一樣,意味著遞迴到一定的層次時候,

* 某個鍊錶會出現null,這時候需要做乙個補0的操作,建立乙個新的節點為空的倆表。這也是

* @param l1

* @param l2

* @return

*/public listnode addtwonumbers2

(listnode l1, listnode l2)

public listnode add

(listnode l1,listnode l2,

int carry)

//如果l1為空則將listnode(0)覆給l1,對於l2也是

l1=(l1==null?

newlistnode(0

):l1)

; l2=

(l2==null?

newlistnode(0

):l2)

;//處理val以及進製標誌

int val = l1.val+l2.val+carry;

carry=

(val>=10?

1:0)

; val=val%10;

l1.val=val;

//現在l1的值就是兩個節點相加後的和了

//之後再次遞迴計算l1.next和l2.next

l1.next=

add(l1.next,l2.next,carry)

;return l1;

}

LeetCode2 兩數相加

嗯。今天兩個簡單題,我可能要墮落了 先貼第乙個 給定兩個非空鍊錶來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。示例 輸入 2 4 3 5 6 4 輸出 7 0 8原因 342 465 807...

LeetCode 2 兩數相加

題目 給定兩個非空鍊錶來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。示例 輸入 2 4 3 5 6 4 輸出 7 0 8 原因 342 465 807 解題 這題就比較簡單了,兩數相加處理好...

LeetCode 2 兩數相加

題目描述 給定兩個非空鍊錶來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。題目思路 先從最低有效位也就是列表 l1 和 l2 的表頭開始相加。由於每位數字都應當處於 0 9 的範圍內,我們計算...