トピック:
2つの非負の整数を表すために、2つの空でないリンクリストが指定されています。その中で、それぞれの桁は逆の順序で格納され、各ノードは1桁しか格納できません。
これらの2つの数値を合計すると、それらの合計を表す新しいリンクリストが返されます。
番号0を除いて、これらの番号はいずれも0で始まらないと想定できます。
例:
入力:(2-> 4-> 3)+(5-> 6-> 4)
出力:7-> 0-> 8
理由:342 + 465 = 807
コード:
class Solution2 {
public static class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x; }
}
public static ListNode addNUmbers(ListNode l1,ListNode l2){
ListNode dummyHead = new ListNode(0);
ListNode p =l1; ListNode q = l2;ListNode curr = dummyHead;
int carry = 0;
while(p!= null || q != null || carry != 0){
int x = (p != null) ? p.val : 0;
int y = (q != null) ? q.val : 0;
int sum = carry + x + y;
carry = sum / 10;
curr.next = new ListNode(sum % 10);
curr = curr.next;
if (p != null) p = p.next;
if (q != null) q = q.next;
}
return dummyHead.next;
}
}
予防:
1単一リンクリストは最初からのみ検索できます
。2追加時に逆数を直接追加することもできます。各桁を追加してから直接キャリーします。キャリーをキャリーに設定し、次の反復を入力します
。3を考慮する必要があります。nullポインタ例外の問題
4整数に変換されると、コンパイルされてオーバーフローします
。5最初に何も追加されないため、キャリーは0でなければなりません。