113. 2つの数値を加算するII
タイトルリンク
出典:LeetCode
リンク:https ://leetcode-cn.com/problems/add-two-numbers-ii
タイトルの説明
空でない2つのリンクリストを与えて、2つの負でない整数を表します。最上位の数字はリストの最初にあります。それぞれのノードは1桁のみを格納します。これら2つの数値を追加すると、新しいリンクリストが返されます。
数字の0を除いて、これらの数字はどちらもゼロで始まらないと想定できます。
上級:
入力リストを変更できない場合はどうすればよいですか?つまり、リスト内のノードを反転することはできません。
例:
入力:(7-> 2-> 4-> 3)+(5-> 6-> 4)
出力:7-> 8-> 0-> 7
もっと難しい
2つのリンクリストの値を1つずつ配列に入れ、対応する位置を小数に追加します。
トピック分析
- 2つのリンクリストの値を順番に配列に入れます。
- 最後に配列に配置された数値を追加し、pop()を使用して最後の要素を返します。
- 対応する位置は、完全な小数点まで加算されます。
- 最後に、リンクされたリストの形式で出力されます。
/ ** *単一リンクリストの定義。 * function ListNode(val){ * this.val = val; * this.next = null; *} * / / ** * @param {ListNode} l1 * @param {ListNode} l2 * @return {ListNode} * / var addTwoNumbers = function(l1、l2){ let arr_1 = []; let arr_2 = []; let arr = []; フラグを0にします。 m = 0とします。 n = 0とします。 while(l1){ arr_1.push(l1.val); l1 = l1.next; } while(l2){ arr_2.push(l2.val); l2 = l2.next; } while(arr_1.length> 0 || arr_2.length> 0){ m = Number(arr_1.pop())|| 0; n =数値(arr_2.pop())|| 0; arr.push((m + n + flag)%10); if(m + n + flag> = 10){ flag = 1; } else { フラグ= 0; } } if(flag === 1){ arr.push(1); } let res = {}; curr = resにします。 while(arr.length> 0){ curr.next = { val:arr.pop()、 next:null }; curr = curr.next; } return res.next; };