码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode两数相加

时间:2020-02-10 22:56:54      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:情况   ext   int   数据结构   new   numbers   节点   tno   需要   

技术图片

 

 

 题目描述很清楚,最容易想到的就是从前往后一次相加即可。

技术图片

 题中所给的数据结构描述:

第一次的算法:

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode res=new ListNode(0);
        ListNode cur=res;
        int      flag = 0;
        while(l1!=null&&l2!=null)
        {
            cur.val=l1.val+l2.val+flag;
            flag=cur.val/10;
            cur.val=cur.val%10;
            cur.next = new ListNode(0);
            cur=cur.next;
            l1=l1.next;
            l2=l2.next;            
        }
        while(l1!=null)
        {
            cur.val=l1.val+flag;
            flag=cur.val/10;
            cur.val=cur.val%10;
            cur.next = new ListNode(0);
            cur=cur.next;
            l1=l1.next;   
        }
        while(l2!=null){
            cur.val=l2.val+flag;
            flag=cur.val/10;
            cur.val=cur.val%10;
            cur.next = new ListNode(0);
            cur=cur.next;
            l2=l2.next;
        }
        return res ;   
    }
}

其中flag为保存是否进位,初始为0。

第一次运行的结果:

技术图片

 

与结果多了一个0,原因在于当节点在最后一个时,也会生成新的节点,所以会多出一个0。同时上述代码还没有考虑到最后一位如果产生进位的情况。所以,我们需要一个新的节点保存最后一个节点的前一个节点。

修改后的代码:

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode res=new ListNode(0);
        ListNode cur=res;
        ListNode pre=null;
        int      flag = 0;
        while(l1!=null&&l2!=null)
        {
            cur.val=l1.val+l2.val+flag;
            flag=cur.val/10;
            cur.val=cur.val%10;
            cur.next = new ListNode(0);
            pre=cur;
            cur=cur.next;
            l1=l1.next;
            l2=l2.next;            
        }
        while(l1!=null)
        {
            cur.val=l1.val+flag;
            flag=cur.val/10;
            cur.val=cur.val%10;
            cur.next = new ListNode(0);
            pre=cur;
            cur=cur.next;
            l1=l1.next;   
        }
        while(l2!=null){
            cur.val=l2.val+flag;
            flag=cur.val/10;
            cur.val=cur.val%10;
            cur.next = new ListNode(0);
            pre=cur;
            cur=cur.next;
            l2=l2.next;
        }
        
        if(flag==0)
        {
           pre.next=null;
        }else
        {
            cur.val=flag;
        }
        
        return res ;   
    }
}

结果:技术图片

 

leetcode两数相加

标签:情况   ext   int   数据结构   new   numbers   节点   tno   需要   

原文地址:https://www.cnblogs.com/stive-night/p/12292783.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!