链表求和

来源:互联网 发布:minecraft0.15js 编辑:程序博客网 时间:2024/06/06 15:47

你有两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,用链表形式返回和。

样例

给出两个链表 3->1->5->null 和 5->9->2->null,返回 8->0->8->null


public ListNode addLists(ListNode l1, ListNode l2) {        ListNode head = null, p = l1, q = l2, k = null;        int carry = 0;        int mod = 0;        while (p != null && q != null) {            int temp = p.val + q.val + carry;            mod = (temp) % 10;            carry = (temp) / 10;            if (head == null) {                head = new ListNode(mod);                k = head;            } else {                k.next = new ListNode(mod);                k = k.next;            }            p = p.next;            q = q.next;        }        if (p == null) {            while (q != null) {                mod = (q.val + carry) % 10;                carry = (q.val + carry) / 10;                if (head == null) {                    head = new ListNode(mod);                    k = head;                } else {                    k.next = new ListNode(mod);                    k = k.next;                }                q = q.next;            }        } else {            while (p != null) {                mod = (p.val + carry) % 10;                carry = (p.val + carry) / 10;                if (head == null) {                    head = new ListNode(mod);                    k = head;                } else {                    k.next = new ListNode(mod);                    k = k.next;                }                p = p.next;            }        }        if (carry != 0) {            k.next = new ListNode(carry);        }        return head;    }