LeetCodeQ2:两数相加

题目:给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

题解:

利用哑结点,遍历两个链表的值使其一 一相加,用carry记录当前的值是否大于10; 大于10下一位如果有值不为空则+1,如果下一位值为空说明已经遍历完成了,则在末尾创建一个新的节点值为 carry值,当前的相加的值为 sum %10。

public ListNode twoSum(ListNode l1, ListNode l2) {
        ListNode dh = new ListNode(0);
        ListNode a = l1, b = l2, pre = dh;
        int carry = 0;
        while (a != null || b != null) {
            int x = (a != null) ? a.val : 0;
            int y = (b != null) ? b.val : 0;
            int sum = carry + x + y;

            carry = sum / 10;
            pre.next = new ListNode(sum % 10);
            pre = pre.next;
            if (a != null)
                a = a.next;
            if (b != null)
                b = b.next;

        }
        // 遍历完成,carry仍然大于0则在末尾创建一个新的节点值为当前的carry值
        if (carry > 0) {
            pre.next = new ListNode(carry);
        }
        return dh.next;
    }