两个链表生成相加链表

class Solution {

    private static ListNode reverse(ListNode head) {
        ListNode pre = null;
        ListNode cur = head;
        ListNode next;
        while (cur != null) {
            next = cur.next;
            cur.next = pre;
            pre = cur;
            cur = next;
        }
        return pre;
    }

    private static ListNode add(ListNode a, ListNode b) {
        int dig = 0;
        ListNode head = new ListNode(0);
        ListNode p = head;
        while (a != null && b != null) {
            int val = dig + a.val + b.val;
            ListNode n = new ListNode(val % 10);
            p.next = n;
            p = n;
            dig = val / 10;
            a = a.next;
            b = b.next;
        }

        while (a != null) {
            int val = dig + a.val;
            ListNode n = new ListNode(val % 10);
            p.next = n;
            p = n;
            dig = val / 10;
            a = a.next;
        }

        while (b != null) {
            int val = dig + b.val;
            ListNode n = new ListNode(val % 10);
            p.next = n;
            p = n;
            dig = val / 10;
            b = b.next;
        }

        if (dig != 0) {
            ListNode n = new ListNode(dig);
            p.next = n;
        }

        p = head.next;

        head = null;

        return p;
    }


    private static ListNode function(ListNode a, ListNode b) {
        return reverse(add(reverse(a), reverse(b)));
    }

    private static void print(ListNode head) {
        while (head != null) {
            System.out.println(head.val);
            head = head.next;
        }
    }


    public static void main(String[] args) {
        ListNode n1 = new ListNode(9);
        ListNode n2 = new ListNode(3);
        ListNode n3 = new ListNode(7);
//        ListNode n4 = new ListNode(5);
//        ListNode n5 = new ListNode(1);
        n1.next = n2;
        n2.next = n3;
//        n3.next = n4;
//        n4.next = n5;

        ListNode n11 = new ListNode(6);
        ListNode n22 = new ListNode(3);

        n11.next = n22;

        ListNode head = function(n1, n11);

        print(head);

    }
}

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


猜你喜欢

转载自blog.51cto.com/tianyiya/2334841