LeetCode-2. Add Two Numbers

You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list. You may assume the two numbers do not contain any leading zero, except the number 0 itself.

Example:

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
Explanation: 342 + 465 = 807.
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {//链表 my
        ListNode re = new ListNode(0);
        ListNode listre = re;
        ListNode list1 =l1;
        ListNode list2 =l2;
        int sum = 0;
        //处理第一个,或者使用返回re.next解决
        if(null!=list1&&null!=list2){
            sum = list1.val+list2.val+sum;
            listre.val = sum % 10;
            list1=list1.next;
            list2=list2.next;
            sum = sum/10;
        }
        while(null!=list1&&null!=list2){
            sum = list1.val+list2.val+sum;
            listre.next= new ListNode(sum%10);
            listre = listre.next;
            list1=list1.next;
            list2=list2.next;
            sum = sum/10;
        }
        if (null!= list1){
            while(null!=list1){
                sum = list1.val+sum;
                listre.next= new ListNode(sum%10);
                listre = listre.next;
                list1=list1.next;
                sum = sum/10;
            }
        }
        else if (null!= list2){
            while(null!=list2){
                sum = list2.val+sum;
                listre.next= new ListNode(sum%10);
                listre = listre.next;
                list2=list2.next;
                sum = sum/10;
            }
        }
        //处理最后的进位
        if(0!=sum){
            listre.next= new ListNode(sum);
        }
        return re;
    }

 

简洁版

public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
    ListNode dummyHead = new ListNode(0);
    ListNode p = l1, q = l2, curr = dummyHead;
    int carry = 0;
    while (p != null || q != null) {
        int x = (p != null) ? p.val : 0;
        int y = (q != null) ? q.val : 0;
        int sum = carry + x + y;
        carry = sum / 10;
        curr.next = new ListNode(sum % 10);
        curr = curr.next;
        if (p != null) p = p.next;
        if (q != null) q = q.next;
    }
    if (carry > 0) {
        curr.next = new ListNode(carry);
    }
    return dummyHead.next;
}

  

posted @ 2019-02-25 09:23  月半榨菜  阅读(80)  评论(0编辑  收藏  举报