件名の説明:
我々は、二つの非空リストは二つの非負整数を表すために使用されて示されています。ここで、それぞれのビットは、方法の逆の順序で格納され、それらは各ノードが一つだけ桁を格納することができます。
我々はこれらの2つの数値を合計した場合、それは新しいリストを返しますし、それらを表現します。
あなたは数字0に加えて、これらの二つの数字が0で始まっていないと仮定することができます。
出典:滞在ボタン(LeetCode)
リンクします。https://leetcode-cn.com/problems/add-two-numbers
例:
入力:(2 - > 4 - > 3)+(5 - > 6 - > 4) 出力:7 - > 0 - > 8 原因:342 + 465 = 807
アイデアの分析:
この問題は、主に関連する操作のリスト事実上、質問のリストに関連しています。解決アイデアは、それがキャリーがあるかどうかを判断、追加、リンクリストを横断する同期2のために、である、非常に直接的です。また、2の長さは、リストの合計が一致しないことが可能なので、もう一つのニーズを判断することに注意してください。最終的には最後までトラバースされた2つのリストを停止します。
コード、最初に再びそれを行うための最も簡単なアイデアを持つすべてのI、およびそののより簡略化バージョンがあります。
コード:
1 / * * 2 重リンクリストのための*の定義。 3 *構造体ListNode { 4 * int型のval; 5 * ListNode *次の; 6 * ListNode(INT X):ヴァル(x)は、次の(NULL){} 7 *}。 8 * / 9 クラスソリューション{ 10 公共: 11 ListNode * addTwoNumbers(ListNodeの* L1と、ListNode * L2){ 12 であれば(L1 == nullptr || L2 == nullptr) 13 リターンnullptr。 14 ListNode *ヘッド= 新しい ListNode(0); 15 ListNode * RES = ヘッド。 16 int型プラスワン= 0 。 17 一方(L1 = nullptr && L2 =!nullptr) 18 { 19 int型の和= L1->ヴァル+ L2->ヴァル+ プラスワン。 20 プラスワン= 0 。 21 であれば(和> = 10 ) 22 { 23 プラスワン=和/ 10 。 24 } 25 RES->次= 新しい ListNode(合計%10 )。 26の RES = RES-> 次。 27 L1 = L1-> 次。 28 L2 = L 2 - > 次。 29 } 30 ながら(L1 =!nullptr) 31 { 32 int型の和= L1->ヴァル+ プラスワン。 33 プラスワン= 0 。 34 であれば(和> = 10 ) 35 { 36 プラスワン=和/ 10 。 37 } 38 = RES->次の新しいですListNode(合計%10 )。 39の RES = RES-> 次。 40 L1 = L1-> 次。 41 } 42 ながら(L2 =!nullptr) 43 { 44 int型の和= L2->ヴァル+ プラスワン。 45 プラスワン= 0 。 46 であれば(和> = 10 ) 47 { 48 プラスワン=和/ 10 。 49 } 50 = RES->次の新しいですListNode(合計%10 )。 51の RES = RES-> 次。 52 L2 = L 2 - > 次。 53 } 54 であれば(プラスワン) 55 { 56 RES->次= 新しいListNode(プラスワン)。 57の RES = RES-> 次。 58 } 59 リターン頭部> 次。 60 } 61 }。
1 / * * 2 重リンクリストのための*の定義。 3 *構造体ListNode { 4 * int型のval; 5 * ListNode *次の; 6 * ListNode(INT X):ヴァル(x)は、次の(NULL){} 7 *}。 8 * / 9 クラスソリューション{ 10 公共: 11 ListNode * addTwoNumbers(ListNodeの* L1と、ListNode * L2){ 12 であれば(L1 == nullptr || L2 == nullptr) 13 リターンnullptr。 14 ListNode *ヘッド= 新しい ListNode(0); 15 ListNode * RES = ヘッド。 16 int型プラスワン= 0 。 17 ながら(!L1 = nullptr || L2 = nullptr) 18 { 19 のint A =(L1 == nullptr?0:L1-> ヴァル) 20 INT B =(L2 == nullptr?0:L2-> ヴァル) 21 INTの合計= A + B + プラスワン。 22 プラスワン= 0 。 23 であれば(和> = 10 ) 24 { 25 プラスワン=和/ 10 。 26 } 27 RES->次= 新しい ListNode(合計%10 )。 28の RES = RES-> 次。 29 の場合(L1 =!nullptr) 30 、L1 = L1-> 次。 31 場合(L2 =!nullptr) 32 、L2 = L 2 - > 次。 33 } 34 35 であれば(プラスワン) 36 { 37 RES->次= 新しいListNode(プラスワン)。 38の RES = RES-> 次。 39 } 40 リターン頭部> 次。 41 } 42 }。