两链表相加

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

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

您可以假设除了数字 0 之外,这两个数都不会以 0 开头。


示例:

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)

输出:7 -> 0 -> 8

原因:342 + 465 = 807


  public static void main(String[] args) {
    ListNode l1 = new ListNode(2);
    ListNode l1_4 = new ListNode(3);
    ListNode l1_3 = new ListNode(5);
    l1.next = l1_4;
    l1_4.next = l1_3;

    ListNode l2 = new ListNode(9);
    ListNode l2_6 = new ListNode(1);
    ListNode l2_4 = new ListNode(5);
    l2.next = l2_6;
    l2_6.next = l2_4;
    System.out.println(addTwoNumbers(l1, l2));
}

  /**
 * 两个链表相加
 * @param l1  2->3->5
 * @param l2  9->1->5
 * @return 1->5->0->1
 */
/**
 * Definition for singly-linked list.
 * public class ListNode {
 * int val;
 * ListNode next;
 * ListNode(int x) { val = x; }
 * }
 */
static ListNode addTwoNumbers(ListNode l1, ListNode l2) {

    ListNode ret = new ListNode(0);
    ListNode one = l1, two = l2, curr = ret;
    // 满10进1
    int a = 10;
    int c = 0;
    while (one != null || two != null) {
        int x = one == null ? 0 : one.val;
        int y = two == null ? 0 : two.val;
        int sum = c + x + y;
        c = sum / a;
        curr.next = new ListNode(sum % a);
        curr = curr.next;
        one = one == null ? null : one.next;
        two = two == null ? null : two.next;
    }
    if (c != 0) {
        curr.next = new ListNode(c);
    }
    return ret.next;
}
// 链表结构
@Data
static class ListNode {
    int val; //当前值
    ListNode next; // 链表下一个值

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