題目描述:
給你兩個 非空 鍊錶來代表兩個非負整數。數字最高位位於鍊錶開始位置。它們的每個節點只儲存一位數字。將這兩數相加會返回乙個新的鍊錶。
你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。
高階:
如果輸入鍊錶不能修改該如何處理?換句話說,你不能對列表中的節點進行翻轉。
示例:
輸入:(7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)
輸出:7 -> 8 -> 0 -> 7
方法1:借助棧實現
主要思路:
(1)將鍊錶中的資料儲存到棧中, 利用先進後出的特性,計算各個結點值的和,然後使用頭插法,將各個結點之和建立的結點,插入到新鍊錶的頭部;
/**
* definition for singly-linked list.
* struct listnode
* };
*/class solution
while
(l2)
//使用頭插法,將建立的結點插入到新的鍊錶中
listnode* dummy=
newlistnode(0
);listnode* cur_node=null;
int carry=0;
//標識進製
while
(!st1.
empty()
&&!st2.
empty()
)while
(!st1.
empty()
)while
(!st2.
empty()
)if(carry)
cur_node=dummy-
>next;
delete dummy;
return cur_node;}}
;
方法2:借助vector
主要思路:
(1)主要思路和上述的一致,只不過把棧改為vector,修改呼叫函式即可;
/**
* definition for singly-linked list.
* struct listnode
* };
*/class solution
while
(l2)
listnode* dummy=
newlistnode(0
);listnode* cur_node=null;
int carry=0;
while
(!st1.
empty()
&&!st2.
empty()
)while
(!st1.
empty()
)while
(!st2.
empty()
)if(carry)
cur_node=dummy-
>next;
delete dummy;
return cur_node;}}
;
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 易錯點 優化 插入新煉表時可以採用...