两数相加

此博客链接:https://www.cnblogs.com/ping2yingshi/p/12736182.html

两数相加()

题目链接:https://leetcode-cn.com/problems/add-two-numbers/comments/

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

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

示例:

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

题解:

        思路:

                 1.重新定义一个节点sum指向l1.

                  2.把l1和l2的数值相加,并加上一个count记录进位的。

                  3.加数对和取余得到各位数字。

                  4.加数对和除以10得到进位的数赋值给sum。

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
            ListNode sum=l1;
             int count=0;
             while(sum!=null)
             {
                 sum.val=(sum.val+l2.val+count);
                 count=sum.val/10;
                 sum.val=sum.val%10;
                 sum=sum.next;
                 l2=l2.next;
             }
             return l1;
    }
}

少考虑一种情况:

 修改的程序:

                      思路:

                                1.新建一个链表。

                                 2.定义一个节点cur指向新建的链表。

                                 3.判断l1和l2是否为空,或者那个为空,要是那个为空,则只加进位和另外一个不为空的数字。

                                 4.把求得的和放入新建的链表中。

                                 5.判断最后还有进位吗?如果还存在进位,则把1加入新的链表中。

                                 6.返回新建链表头节点的next.

                     注意:这里是把每次cur指向下一个节点创建一个新的节点并把求和结果放入节点中。

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
            ListNode sum=new ListNode(0);//新建一个链表
            ListNode cur=sum.next;
             int count=0;
             while(l1!=null||l2!=null)
             { 
                 if(l1!=null&&l2!=null)
                   cur.val=(l1.val+l2.val+count);
                 if(l1==null&&l2!=null)
                   cur.val=(l2.val+count);
                 if(l1!=null&&l2==null)
                   cur.val=(l1.val+count);
                 count=cur.val/10;
                 cur.val=cur.val%10;
                 cur=new ListNode(cur.val);
                 cur=cur.next;
                 l1=l1.next;
                 l2=l2.next;
             }
             if(count==1)
             {
               cur.next=new ListNode(1);

             }
             return sum.next;
    }
}

报错说明:

修改代码1:

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
            ListNode sum=new ListNode(0);//新建一个链表
            ListNode cur=sum;
             int count=0;
             int sumnum=0;
             while(l1!=null||l2!=null)
             { 
                 if(l1!=null&&l2!=null)
                   sumnum=(l1.val+l2.val+count);
                 if(l1==null&&l2!=null)
                 sumnum=(l2.val+count);
                 if(l1!=null&&l2==null)
                   sumnum=(l1.val+count);
                 count=sumnum/10;
                 sumnum=sumnum%10;
                 cur.next=new ListNode(sumnum);
                 cur=cur.next;
                 if(l1!=null)
                    l1=l1.next;
                 if(l2!=null)
                    l2=l2.next;
             }
             if(count==1)
             {
               cur.next=new ListNode(1);

             }
             return sum.next;
    }
}

 

 

 

修改代码2:这里是把每次求得的和放入新建的节点中,然后使cur的next指向这个新的节点

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
            ListNode sum=new ListNode(0);//新建一个链表
            ListNode cur=sum;
             int count=0;
             int sumnumble=0;
             while(l1!=null||l2!=null)
             { 
                 if(l1!=null&&l2!=null)
                   sumnumble=(l1.val+l2.val+count);
                 if(l1==null&&l2!=null)
                   sumnumble=(l2.val+count);
                 if(l1!=null&&l2==null)
                   sumnumble=(l1.val+count);
                 count=sumnumble/10;
                 sumnumble=sumnumble%10;
               ListNode  curnode=new ListNode(sumnumble);
                cur.next=curnode;
                cur=cur.next;
                 if(l1!=null)
                   l1=l1.next;
                 if(l2!=null)
                   l2=l2.next;
             } 
             
             return sum.next;
    }
}

这下可以在最后数字相加等于10时,新增加一个节点,但是并没有保存进位的数字。

 

 添加如果最后一个数相加等于10时,进一位,并把进位加入到新建的链表中。

代码如下:

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
            ListNode sum=new ListNode(0);//新建一个链表
            ListNode cur=sum;
             int count=0;
             int sumnumble=0;
             while(l1!=null||l2!=null)
             { 
                 if(l1!=null&&l2!=null)
                   sumnumble=(l1.val+l2.val+count);
                 if(l1==null&&l2!=null)
                   sumnumble=(l2.val+count);
                 if(l1!=null&&l2==null)
                   sumnumble=(l1.val+count);
                 count=sumnumble/10;
                 sumnumble=sumnumble%10;
               ListNode  curnode=new ListNode(sumnumble);
                cur.next=curnode;
                cur=cur.next;
                 if(l1!=null)
                   l1=l1.next;
                 if(l2!=null)
                   l2=l2.next;
             } 
             if(count==1)
             {
                ListNode  curnode=new ListNode(1);
                cur.next=curnode;
             }
             
             return sum.next;
    }
}

 

posted @ 2020-04-20 10:15  萍2樱释  阅读(287)  评论(0编辑  收藏  举报