Aスラグスラグブロガー、ブラシleetcodeシュシュ自身、翼に見るために、より良い方法を作った偉大な神。タイトルと電源ボタン(LeetCode)からソリューション、ポータル。
アルゴリズム:
我々は2つの非空リストは二つの非負整数を表すために使用されて示されています。ここで、それぞれのビットは、方法の逆の順序で格納され、それらは各ノードが一つだけ桁を格納することができます。
我々はこれらの2つの数値を合計した場合、それは新しいリストを返しますし、それらを表現します。
あなたは数字0に加えて、これらの二つの数字が0で始まっていないと仮定することができます。
例:
入力:(2 - > 4 - > 3)+(5 - > 6 - > 4)
出力:7 - > 0 - > 8
原因:342 + 465 = 807
実際には非常にシンプルなアイデアの始まり、実際には、対応する位置の合計の数字、再びキャリーそれがあれば次の位置+1、普通のほか。
公共ListNodeのAddTwoNumbers(ListNode L1、L2 ListNode) { VARの値=(l1.val + l2.val)%10 。 VaRのフラグ=(l1.val + l2.val)/ 10 > 0 。 VaRの結果は= 新しいListNode(値); VAR returnResult = 結果; もし(フラグ) { result.nextは = 新しい ListNode(1 )。 } VAR A = l1.next。 VAR = B l2.next。 しばらく(!=ヌル || !B = ヌル) { VARの温度=(=!ヌル a.val:?0 ) +(B =!ヌル b.val:?0 ) !+(result.next = nullの?result.next.val:0 ); VaRの addNums =一時%10 。 VAR addFlag = TEMP / 10 > 0 。 もし(result.next == NULL ) { result.next = 新しいですListNode(addNums)。 } 他 { result.next.val = addNums。 } =!= nullの?a.next:ヌル。 B = B!= nullの?b.next:ヌル。 結果 = result.nextを。 もし(addFlag) { result.next = 新しい ListNode(1 )。 } } 戻りreturnResultと、 }
第二に、少し片付け、第1の判定がなくなります。とがった問題について、ここで注意してください、ListNodeは、実際には、ヒープメモリアドレスの存在を指し参照型です。同じアドレスreturnResultが実際に指しているとの結果の始まりそう。このように注意しなければ次の割り当てで、開始値がnullである与えられた場合、リストカットオフにつながります。
公共ListNodeのAddTwoNumbers(ListNode L1、L2 ListNode) { ListNode結果 = 新しい ListNode(0 )。 VAR returnResult = 結果; VAR A = L1; VAR = B L2; 一方、(!= NULL!|| B = NULL ) { VARの TEMP =(!= NULL:a.val 0 ) +(B =!ヌル b.val?:0 ) !+(result.next = NULL?result.next.val:0 ); VaRの addNums =一時%10 。 VAR addFlag = TEMP / 10 > 0 。 result.nextは = 新しいListNode(addNumsを)。 結果 = result.nextを。 != = nullは?a.next:ヌル。 B = B!= nullの?b.next:ヌル。 もし(addFlag) { result.next = 新しい ListNode(1 ); } } 戻りreturnResult.nextと、 }