LeetCode2 445 兩數相加I II

2021-09-25 23:04:58 字數 2230 閱讀 1326

原題目

第一題

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

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

您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。

示例:輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)

輸出:7 -> 0 -> 8

原因:342 + 465 = 807

第二題

給定兩個非空鍊錶來代表兩個非負整數。數字最高位位於鍊錶開始位置。它們的每個節點只儲存單個數字。將這兩數相加會返回乙個新的鍊錶。

你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。

高階:如果輸入鍊錶不能修改該如何處理?換句話說,你不能對列表中的節點進行翻轉。

示例:輸入: (7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)

輸出: 7 -> 8 -> 0 -> 7

題目分析

第一題方法一:迭代

方法二:遞迴

兩者方法思路一樣,同大數相加問題

第二題方法一:雙棧

將兩個鍊錶分別入兩棧,然後彈出,利用第2題大數相加的思路相加儲存即可

方法二:補0+遞迴

在短的鍊錶前面補0,使其與長的鍊錶一樣長,然後遞迴回溯,從後往前相加儲存,因為考慮到可能鍊錶進製後會比l1,l2多乙個節點,所以從兩個鍊錶為null的時候開始創節點,這樣就可以多創乙個節點,儲存的就是上兩個節點的值,先不急著進製,直接將相加的值放在儲存鍊錶的當前節點,然後等回溯到上乙個時,再將進製值(即下一節點除10)加上當前位置的和進行儲存,對下一節點進行取餘10即可。以此方式回溯。

完整**

第一題方法一

struct listnode*

addtwonumbers

(struct listnode* l1,

struct listnode* l2)

return head->next;

}

方法二:

int c=0;

struct listnode*

addtwonumbers

(struct listnode* l1,

struct listnode* l2)

第二題

方法一

struct listnode*

addtwonumbers

(struct listnode* l1,

struct listnode* l2)

while

(l2!=

null

)int c=0;

while

(len1||len2||c)

return res;

}

方法二

struct listnode *

addlist

(struct listnode* l1,

struct listnode* l2,

int c)

int temp=l1->val+l2->val;

res->next=

addlist

(l1->next,l2->next,temp)

; res->val=c+

(res->next->val)/10

; res->next->val%=10

;return res;

}struct listnode*

addzero

(struct listnode *l,

int k)

return l;

}struct listnode*

addtwonumbers

(struct listnode* l1,

struct listnode* l2)

while

(head2!=

null)if

(len2>len1)

else

res=

addlist

(l1,l2,0)

;if(res->val==0)

return res->next;

return res;

}

LeetCode 2 445 兩數相加 鍊錶

在給定的鍊錶中,數字所在的位數隨著鍊錶前進方向而變高 因此,在每一輪迭代中 直到兩個鍊錶都遍歷結束,迭代完成 除此之外,還需要注意兩點 在這道題中,數字最高位是位於鍊錶開始位置的,這意味著我們不能沿著鍊錶的前進方向 來進行數字的相加 我們可以先將兩個鍊錶進行反轉,然後將結果傳入上一題寫好的函式中,最...

兩數相加 2 445

1 列印debug 時會導致煉表頭指標偏離,列印debug正確後需要刪除該部分,才能獲取正確結果。編寫拷貝時出現入參 或者錯別字的地基錯誤,需要格外注意負責浪費過多的時間。2 相加運算時需要記錄進製資訊,且最高位的進製資訊需要單獨處理 3 迭代運用的不夠熟練,特別是迭代函式中煉表新元素建立之後需要賦...

LeetCola 2 445 兩數相加

2.兩數相加 public listnode addtwonumbers listnode l1,listnode l2 if carry 0 return sentinel.next 給你兩個非空鍊錶來代表兩個非負整數。數字最高位位於鍊錶開始位置。它們的每個節點只儲存一位數字。將這兩數相加會返回乙...