2.両数加算Leetcode Java

1908 ワード


タイトル:
2つの非負の整数を表すために、2つの非空のチェーンテーブルが与えられる.ここで、それぞれのビット数は逆順序で格納され、各ノードには1桁の数字しか格納されません.
この2つの数を加算すると、新しいチェーンテーブルが返され、合計が表示されます.
数値0以外の2つの数は0で始まると仮定できます.
 
 
考え方:
1.2つのチェーンテーブルを同じ長さと見なし、短いものがあれば前に0を補充し、例えば964+036=1010;
2.計算のたびに前のキャリーを考慮し、現在の計算後もキャリー値を記録します.
3.2つのチェーンテーブルが移動する後にcarry=1が発見された場合、新しいチェーンテーブルの一番前にノード1が追加される.
4.チェーンテーブルの問題で、結果がヘッダノードである場合、通常、真のヘッダノードheadを指す予めポインタpreを初期化する必要がある.事前ポインタを使用する目的は、チェーンテーブルの初期化時に使用可能なノード値がなく、チェーンテーブル構築プロセスでポインタの移動が必要であり、ヘッダポインタが失われ、結果を返すことができないことです.
 
 
//                      。  ,                    ,                   。 
//
//   ,           ,                 。 
//
//           0   ,         0   。 
//
//   : 
//
//   :(2 -> 4 -> 3) + (5 -> 6 -> 4)
//  :7 -> 0 -> 8
//  :342 + 465 = 807
// 
// Related Topics      


//leetcode submit region begin(Prohibit modification and deletion)

import java.util.List;




class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode pre = new ListNode(0);
        ListNode cur = pre;
        int carry = 0;
        while (l1 != null || l2 != null) {
            int x = l1 == null ? 0 : l1.val;
            int y = l2 == null ? 0 : l2.val;
            int sum = x + y + carry;
            //   
            carry = sum / 10;
            //     
            sum = sum % 10;
            cur.next = new ListNode(sum);
            cur = cur.next;
            if (l1 != null) {
                l1 = l1.next;
            }
            if (l2 != null) {
                l2 = l2.next;
            }
        }
        if (carry == 1) {
            cur.next = new ListNode(carry);
        }
        //return pre.next      listNode    ,              。  listNode    next          ,             。
        return pre.next;
    }
}
//leetcode submit region end(Prohibit modification and deletion)