445 兩數相加 II

2021-10-25 09:25:42 字數 974 閱讀 1570

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

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

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

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

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

首先自己想的方法就是遞迴,既然是遞迴,那麼就需要對齊位數,先算出兩個list的長度,然後給長鍊錶遍歷到相應的位數,然後兩個鍊錶同時遞迴。然後便是和兩數相加i同樣的操作,注意的一點就是進製,尤其是最後一位進製,還要新增乙個節點。

class solution 

tmp = l2;

int length2 = 0;

while (tmp != null)

if (length1 > length2) else

if (sum > 0)

return ans;

}public void add(int x,int y)

public void dfs(listnode longlist, listnode shortlist,int n) else if (longlist.next != null || shortlist.next != null)

if (n == 0) else

}}

第二種方法是使用輔助棧,輔助棧思路很簡單就不講了。

class solution 

while (l2 != null)

while (!(stack1.isempty() && stack2.isempty()))

if (sum > 0)

return ans;

}}

445 兩數相加 II

這種題的用例是一定會搞一些很大的數的。long都會溢位,所以我們就不用嘗試轉數字做加法轉鍊錶的方法了。另外直接倒置兩個鍊錶再做加法的做法會改變原鍊錶,題幹也說了禁止改動原鍊錶。1.求兩個鍊錶長度,如果一長一短,把短的前面加若干個0節點,使得兩個鍊錶長度相同。之後對於就遞迴連線鍊錶。dfs函式引數為前...

445 兩數相加 II

演算法 由於鍊錶資料相加是逆序的,可以通過棧來儲存鍊錶資料,棧是先進後出,順序就變成了從末位相加,其實本題難度不大,就是不太容易想到使用棧來存資料計算。definition for singly linked list.public class listnode class solution tem...

445 兩數相加 II

445.兩數相加 ii 2.兩數相加 的擴充套件 definition for singly linked list.public class listnode class solution if c 0 return reverselist dummy.next 易錯點 優化 插入新煉表時可以採用...