• leetcode_2-两数相加_javascript


    题目

    2.两数相加

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

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

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

    示例:

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

    思路

    • JavaScript解法

    • 这个题目之前咋一看以为很简单,只要数组每项相加取余进位就可以了,但是我网络它是链表哇!!!所以一开始给我们的两个好像是数组的东东,其实是两个链表的首部,知道了这个之后,解题就变得简单了。具体的解释见代码注释。

    • 复杂度的话取决于最大的数的位数,运行时间在130ms左右,内存消耗41.5MB左右

    代码

    /**
     * Definition for singly-linked list.
     * function ListNode(val) {
     *  看这里看这里,先看看ListNode
     *     this.val = val;
     *     this.next = null;
     * }
     */
    /**
     * @param {ListNode} l1
     * @param {ListNode} l2
     * @return {ListNode}
     */
    var addTwoNumbers = function(l1, l2) {
      let temp = new ListNode(0); // 可以先看看上面ListNode的结构
      const result = temp; // 记录结果指针的首部
      let index = 0; // 进位,用于记录两数相加是否进位
      for (;l1||l2||index;) { // 当且仅当l1,l2皆为null且无进位时,结束循环
        let next = new ListNode(); // 新建一个节点
    
        temp.next = next; // 将结果链表的下一个指向新创建的节点
        temp = next; // 将结果链表的当前节点设为新创建的节点,以便下次循环可以接上
    
        let val = index; // val是进位与两个数当前位相加的结果,这里先设为进位的数值
    
        if (l1) { // l1不为null的时候,可以认定l1.val不为undefined,下面同理
          val += l1.val;
          l1 = l1.next;
      }
        if (l2) {
          val += l2.val;
          l2 = l2.next;
      }
    
        next.val = val; // 因为是引用类型,所以这里也可以写作temp.val
      
        if (next.val > 9) {
          index = 1; // 进位
          next.val %= 10;
        } else {
          index = 0;
        }
        next = null //释放内存
      }
      return result.next; //注意这里是下一个节点
    };
    

    注意点

    • 这个题目主要就是要理解好链表是怎么一回事,再去写的时候就很顺风顺水了。
  • 相关阅读:
    CF1391D 【505】
    CF1389C 【Good String】
    CF1364C 【Ehab and Prefix MEXs】
    CF1353E 【K-periodic Garland】
    CF1349A 【Orac and LCM】
    CF1352C 【K-th Not Divisible by n】
    CF413D 【2048】
    CF257B 【Playing Cubes】
    CF267A 【Subtractions】
    2018.8.16提高B组模拟考试
  • 原文地址:https://www.cnblogs.com/azoux/p/13306225.html
Copyright © 2020-2023  润新知