zoukankan      html  css  js  c++  java
  • 两数相加

    此博客链接: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;
        }
    }
  • 相关阅读:
    【redis】主从复制
    【redis】订阅功能
    【redis】基础
    MySQL【十二】pymysql操作数据库
    MySQL【十一】创建索引
    MySQL【十】认识索引
    MySQL【九】树
    MySQL【八】多表查询
    ubuntu 制作ISO模块
    ubuntu 开机自启动
  • 原文地址:https://www.cnblogs.com/ping2yingshi/p/12736182.html
Copyright © 2011-2022 走看看