leetcode 两数相加 java实现

给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。

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

示例:

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

class ListNode {
    int val;
    ListNode next;
    ListNode(int x) { val = x; }
}
class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        //创建一个不储存数据的头结点
        ListNode root=new ListNode(0);
        //使尾节点指向头节点
        ListNode rear=root;
        //定义一个初始进位
        int carry=0;
        if (l1==null)
            return l2;
        if(l2==null)
            return l1;
        while((l1!=null)&&(l2!=null))
        {
            int rem=(l1.val+l2.val+carry)%10;
            ListNode node=new ListNode(rem);
            rear.next=node;
            carry=(l1.val+l2.val+carry)/10;
            //rear始终指向最后一个节点
            rear=node;
            l1=l1.next;
            l2=l2.next;     
        }
        if (l1==null)
            rear.next=l2;
        else
            rear.next=l1;
        //如果加完还有进位
        if (carry==1)
        {
            while(rear.next!=null)
            {
                int sum=(rear.next.val+carry);
                rear.next.val=sum%10;
                
                carry=sum/10;
                rear=rear.next;
            }
                
        //如果最后还有进位
            if (carry==1)
            {
                rear.next=new ListNode(2);
            }
        }
        return root.next;
    }
}

 

posted on 2018-05-15 15:47  yfyfyf947  阅读(185)  评论(0编辑  收藏  举报