zoukankan      html  css  js  c++  java
  • 两数之和

    (1)给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

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

    示例:

    输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)

    输出:7 -> 0 -> 8

    原因:342 + 465 = 807

    解题思路:遍历链表依次相加(遍历链表利用非空,.next进行指针移动)

    注意问题:(1)链表为空的时候,数值为0 (2)carry数值是/不是取余,10+9=19,表示的进位,sum代表的数值的个位需要取余运算(3)当链表长度不一样的时候,最后可能发生进位。1+9=10的情况;

    class Solution {
        public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
    //         创建一个ListNode用来返回和的链表
           ListNode head = new ListNode(0);
            //p->l1链表的头部,代表链表的index 表示链表的实时位置
           ListNode p = l1 , q = l2,current = head;
           int carry = 0; //代表进位的位数;
            //遍历链表,由于链表的长度不确定,所以||确定每个链表都可以遍历万,避免链表长度不一致;
           while(p!=null || q!=null){
               //不为空的时候取出链表的数值,当链表到达底部的时候有一个链表可能为空,数值为0;
               int x = (p!=null)?p.val:0;
               int y = (q!=null)?q.val:0;
               int sum = (x+y+carry)%10; //sum的和等于两数的和, 7+8 = 15 只留下5 其余的进位
               carry = (x+y+carry)/10; //carry和放在后面更新,首次的时候carry数值为0,15/10=1.5 进位进1,10+9=19/10 =1,9/10=0;
               current.next = new ListNode(sum); //sum数值存入到链表里面,
               current= current.next;
               //指针指向下一个位置
               if(p!=null) p = p.next;
               if(q!=null) q = q.next;
               
               
           }  
            //遍历万的数值;
          if (carry > 0) { //考虑最后链表遍历玩还有数值的情况
            current.next = new ListNode(carry);
         }
            return head.next;
        }
    }
    

      

      

  • 相关阅读:
    js自动小轮播
    js字符串
    工资
    可是姑娘,你为什么要编程呢?
    程序猿媳妇儿注意事项
    js勾选时显示相应内容
    js点击显示隐藏
    js选项卡
    js数组
    js旋转V字俄罗斯方块
  • 原文地址:https://www.cnblogs.com/love-life-insist/p/10120379.html
Copyright © 2011-2022 走看看