2.両数加算javaの書き方

1353 ワード

問題の説明:
2つの非負の整数を表すために、2つの非空のチェーンテーブルが与えられる.ここで、それぞれのビット数は逆順序で格納され、各ノードには1桁の数字しか格納されません.この2つの数を加算すると、新しいチェーンテーブルが返され、合計が表示されます.
問題解決の考え方:どちらかのチェーンテーブルで空かを判断することを循環条件とし、2つのチェーンテーブルが必ずしも等しいとは限らないので、どちらかがnullであるかを判断する必要があり、nullであれば遍歴時にその後の値を0に割り当て、演算を行ってキャリー値と「求めた和値」を取得し、両方のチェーンテーブルが頭打ちになって、しかも未処理のキャリーがある場合、進位を後ろ(すなわち最後の最上位)に掛け、ループ更新を行い、最終的に新しいチェーンテーブルのヘッダノードに戻る.
class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode p = l1;


        // carry       ,     
        int carry = 0;

        //    q.next == null
        while (l2 != null) {

            //            ,       ,      ,             0
            if (p.next == null && l2.next != null) {
                p.next = new ListNode(0);
            }
            if (p.next != null && l2.next == null) {
                l2.next = new ListNode(0);
            }

            //     
            int sumAll = carry + p.val + l2.val;
            p.val = sumAll % 10;

            //      
            carry = sumAll / 10;

            //           ,         ,        
            if (p.next == null && l2.next == null && carry != 0) {
                p.next = new ListNode(carry);
            }

            p = p.next;
            l2 = l2.next;
        }
        return l1;
    }
}

実行時間2 ms