にすう加算


2つの非負の整数を表す2つの非空のチェーンテーブルが与えられる.ビット数は逆順序で格納され、各ノードには単一の数値しか格納されません.2つの数を加算して新しいチェーンテーブルを返します.数字0以外の2つの数字はゼロで始まると仮定できます.
例:
(2 -> 4 -> 3) + (5 -> 6 -> 4)
7 -> 0 -> 8
342 + 465 = 807

この問題を見始めたばかりのとき、私はただの菜鳥だった.最も基本的なチェーン時計は何なのか分からず、データ構造がすっかり忘れてしまった.
正直に言うと、私は直接見た解析ですが、コードが読めないなんて、私の料理がどこまであるか考えてみてください.
長い間やってやっと分かった.
まずListNodeクラスがあります
class ListNode {
    int val;////      
    ListNode next;//       

    ListNode(int x) {//       
        val = x;
    }
}

そして和を実現する方法です.
public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode dummyHead = new ListNode(0);//          
        ListNode p = l1, q = l2, curr = dummyHead; //       ,p  l1,q  l2,curr       
        int carry = 0;//       
        while (p != null || q != null) {
            int x = (p != null) ? p.val : 0;//  p   , p    x
            int y = (q != null) ? q.val : 0;//  q   , q    y
            int sum = carry + x + y; //             
            carry = sum / 10;//     
            curr.next = new ListNode(sum % 10);//      ,       curr.next
            curr = curr.next;//curr         
            if (p != null) p = p.next;//  p    , p  p      
            if (q != null) q = q.next;//  q    , q  q      
        }
        if (carry > 0) {//             ,            
            curr.next = new ListNode(carry);
        }
        return dummyHead.next;//          ,    .next
    }

入力値:
public static void main(String[] args) {
        ListNode ln1_1 = new ListNode(2);
        ListNode ln1_2 = new ListNode(4);
        ListNode ln1_3 = new ListNode(3);
        ln1_1.next = ln1_2;
        ln1_2.next = ln1_3;
        ListNode ln2_1 = new ListNode(5);
        ListNode ln2_2 = new ListNode(6);
        ListNode ln2_3 = new ListNode(4);
        ln2_1.next = ln2_2;
        ln2_2.next = ln2_3;
        ListNode l3 = addTwoNumbers(ln1_1, ln2_1);
         while (l3 != null) {
            System.out.print(l3.val + ",");
            l3 = l3.next;
        }
    }

これは入力した値で、正常に運行することができて、私の上で理解したのが正しいことを知らないで、もし間違いがあれば、指摘してください、ありがとうございます.