zoukankan      html  css  js  c++  java
  • 2、两数相加 | JS-链表

    给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。

    请你将两个数相加,并以相同形式返回一个表示和的链表。

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

     

    示例 1:

    输入:l1 = [2,4,3], l2 = [5,6,4]
    输出:[7,0,8]
    解释:342 + 465 = 807


    示例 2:

    输入:l1 = [0], l2 = [0]
    输出:[0]


    示例 3:

    输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
    输出:[8,9,9,9,0,0,0,1]
     

    提示:

    每个链表中的节点数在范围 [1, 100] 内
    0 <= Node.val <= 9
    题目数据保证列表表示的数字不含前导零

     1 /**
     2  * Definition for singly-linked list.
     3  * function ListNode(val, next) {
     4  *     this.val = (val===undefined ? 0 : val)
     5  *     this.next = (next===undefined ? null : next)
     6  * }
     7  */
     8 /**
     9  * @param {ListNode} l1
    10  * @param {ListNode} l2
    11  * @return {ListNode}
    12  */
    13 var addTwoNumbers = function(l1, l2) {
    14     const l3 = new ListNode(0);  //相当于两个数从个位开始相加,链表从左往右存储的就是个位、十位、百位...
    15     let p1 = l1;
    16     let p2 = l2;
    17     let p3 = l3;
    18     let carry = 0;  //如果相加大于10了,十位上的数
    19     while(p1 || p2){
    20         const v1 = p1 ? p1.val : 0; //如果两个链表一长一短,短的那个走完了就设为0
    21         const v2 = p2 ? p2.val : 0;
    22         const val = v1 + v2 + carry; //如果前两个数字相加大于10了,所进的哪一位
    23         carry = Math.floor(val / 10);
    24         p3.next = new ListNode(val % 10);
    25         if(p1) p1 = p1.next; //链表后面如果还有值,就向后移动
    26         if(p2) p2 = p2.next;
    27         p3 = p3.next;
    28     }
    29     if(carry) {
    30         p3.next = new ListNode(carry);  //如果到最后遍历完链表了,carry值不为0,说明还需要向后进一位
    31     }
    32     return l3.next; //l3一开始存的是参数为0的头结点,后面才是需要返回的结果
    33 };
  • 相关阅读:
    封装cookie
    敏感词过滤
    面向对象改成选项卡
    正则表达式
    cookie
    DOM
    系统对象
    cookie记录用户名
    6个原则
    23中设计模式
  • 原文地址:https://www.cnblogs.com/oaoa/p/14825355.html
Copyright © 2011-2022 走看看