Leetcode 002 兩數相加

2022-08-02 18:21:09 字數 1911 閱讀 8584

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

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

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

示例:

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

輸出:7 -> 0 -> 8

原因:342 + 465 = 807

2.1 解題思路

題中鍊錶順序正好是低位到高位,先低位相加,有進製保持,下一位計算加上進製,直到最高位相加,如果有進製,生成新的結點儲存。

2.2 我的錯誤**

有時候,從錯誤中才能學到真知識。

現在刷題,很容易到網上找到各種答案,因此,初學者往往因為無法忍受一遍又一遍的除錯,而放棄獨立思考,選擇取拷貝別人的**,以理解別人的**代替了自己刷題的那個拔高的訓練過程,這實在是很可惜的,刷題的效果會大打折扣。

我的錯誤:

應當建立新的鍊錶來儲存結果,保留原鍊錶。因為傳入原鍊錶l1和l2可能還需要用到,不能輕易更改;

解題思路不對:

//

執行結果錯誤,方法不對,努力白費,用這個思路改了好多遍,放棄了這個錯誤或繁瑣的思路。

//沒有建立全新的鍊錶,使用l1、l2中較長的儲存結果

class

solution

if (l1 !=null)

if (l1 == null && carry == 1

) listnode(1);

return

l1; }

else

if (l2 == null && carry == 1

) listnode(1);

return

l2; }

}};

好的**應該用比較通用的形式,概括表達出所有可能的情況。**中紅色標註的行是關鍵行。

//

一般地,建議建立新鍊錶儲存結果,不在原煉表上直接做修改,因為原鍊錶可能還要使用。

#include

#include

using

namespace

std;

struct

listnode

};typedef listnode*linklist;

class

solution

//最後的進製

if (carry == 1

)

return hl3->next;

}};int

main()

return0;

}//可能的問題:記憶體洩漏,建立的頭節點hl3最終沒有被釋放。

* * definition for singly-linked list.

* struct listnode

* }; */

//優化c++i/o提速

static

const auto __ =() ();

class

solution

if(b !=null)

cur = cur->next;

}if(carry)

return l_result->next;

}};//可能的問題:記憶體洩漏,建立的頭節點l_result最終沒有被釋放。

跳轉另一篇部落格:leetcode 445. 兩數相加 ii

LeetCode002 兩數相加

給出兩個非空的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照逆序的方式儲存的,並且它們的每個節點只能儲存一位數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2 4 3 5 6 4 輸出 7 0 8原...

LeetCode 002 兩數相加

給你兩個非空的鍊錶,表示兩個非負的整數。它們每位數字都是按照 逆序 的方式儲存的,並且每個節點只能儲存 一位數字。請你將兩個數相加,並以相同形式返回乙個表示和的鍊錶。你可以假設除了數字0之外,這兩個數都不會以0開頭。輸入 l1 2,4,3 l2 5,6,4 輸出 7,0,8 解釋 342 465 8...

LeetCode題解002 兩數相加

給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字 如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和 您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭 輸入 2 4 3 5 6 4 輸出 7 0...