LeetCode 445 兩數相加 II

2022-08-11 19:51:26 字數 1835 閱讀 8156

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

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

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

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

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

這道題呢,也有兩種解法,一種是用棧來做,另一種是用遞迴來做。棧解法比較簡單直觀,所以先來看看用棧怎麼做的吧~

首先,我們把這兩個鍊錶分別用兩個棧儲存,那麼因為棧是先進後出的結構嘛,所以呢,每次取棧的top元素,相當於就是取鍊錶的尾結點啦。得到兩個尾結點,那當然就要把它們求和咯。到這裡,就像前一道倒序鍊錶求和題了。。進製的處理啊,鍊錶長度不一啊。

重點有三:sum = p + q + carry、新結點的值是sum%10、進製carry的值是sum/10.

當乙個棧為空時,此時令其對應的值為0就好啦。

但是,這道題的答案鍊錶是正序的,所以要用頭插法,也就是,每次new出來的求和結點應當放在鍊錶的頭部。這個實現也不難,一開始我們令答案鍊錶res為nullptr,然後每次都讓new出來的結點tmp指向res,再讓res=tmp就可以了。

c++**如下:

1/**

2* definition for singly-linked list.

3* struct listnode

7* };8*/

9class

solution

24if

(q.size())

28int sum = m + n +carry;

29 carry = sum / 10

;30 listnode* tmp = new listnode(sum % 10

);31 tmp->next =res;

32 res =tmp;33}

34return

res;35}

36 };

用遞迴來解的話,我們第一步要將兩個鍊錶補齊,為什麼要補齊,因為之後的遞迴函式的需要。。那怎麼補齊嘞,就是讓短的那個鍊錶前面補上0。既然是前面補0,那還是用上面所說的頭插法,很簡單吧~當然首先要遍歷兩個鍊錶,來判斷哪個長,哪個短哈哈,這個就不用說啦。

然後就是最重要的遞迴函式了,我們這個遞迴函式呢,返回的是當前位置產生的進製噢!知道了函式的目的,就很好寫這個函式了。當前位置的進製,要看當前位置結點的和,還有低位來的進製,對吧~低位來的進製,沒錯,就是在這裡遞迴~邊界條件是當鍊表為空時,最低位肯定是沒有進製的,直接返回0即可。因為在計算進製的時候,是需要求和的,在這個過程中,答案鍊錶res就可以得到了。

如果最後carry不為0,那麼肯定為1,再new乙個值為1的結點,放到鍊錶頭部就好了~

c++**如下:

1/**

2* definition for singly-linked list.

3* struct listnode

7* };8*/

9class

solution

2021 listnode* addtwonumbers(listnode* l1, listnode*l2) 37}

38else

if(m 4647

}48 carry =addtwonumbershelper(p, q, res);

49if

(carry)

54return

res;55}

56 };

leetcode 445 兩數相加 II

給定兩個非空鍊錶來代表兩個非負整數。數字最高位位於鍊錶開始位置。它們的每個節點只儲存單個數字。將這兩數相加會返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。輸入 7 2 4 3 5 6 4 輸出 7 8 0 7 分別遍歷兩個鍊錶,將鍊錶代表的數存於a,b 根據a,b的和,用...

Leetcode445 兩數相加 II

給定兩個非空鍊錶來代表兩個非負整數。數字最高位位於鍊錶開始位置。它們的每個節點只儲存單個數字。將這兩數相加會返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。高階 如果輸入鍊錶不能修改該如何處理?換句話說,你不能對列表中的節點進行翻轉。示例 輸入 7 2 4 3 5 6 4 ...

LeetCode 445 兩數相加II(Java)

給定兩個非空鍊錶來代表兩個非負整數。數字最高位位於鍊錶開始位置。它們的每個節點只儲存單個數字。將這兩數相加會返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。高階 鍊錶不能修改該,換句話說,你不能對列表中的節點進行翻轉。示例 輸入 7 2 4 3 5 6 4 輸出 7 8 0...