美文网首页
LeetCode之两数相加——JavaScript实现

LeetCode之两数相加——JavaScript实现

作者: 极奏 | 来源:发表于2019-02-08 00:22 被阅读0次

    给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
    如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
    您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

    示例:

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

    看到这道题的时候有点无从下手,因为不知道js的链表表现形式是怎么样的
    看到一篇博文JavaScript 版数据结构与算法(三)链表才稍微理解

    题中的2->4->3可以理解为

    {
      element: 2,
      next: {
        element: 4,
        next: {
          element: 3,
          next: null
        }
      }
    }
    

    那这样就好办了

    解题思路:

    • 取出每次遍历的链表值相加
    • 如果进位则统计起来
    • 题中l1,l2长度不确定,所以当l1,l2以及进位不为空时,继续计算
    • 用一个新的对象存要返回的链表

    需要的知识点:

    • 如何在javascript里遍历链表

    JavaScript代码

    /**
     * Definition for singly-linked list.
     * function ListNode(val) {
     *     this.val = val;
     *     this.next = null;
     * }
     */
    /**
     * @param {ListNode} l1
     * @param {ListNode} l2
     * @return {ListNode}
     */
    var addTwoNumbers = function(l1, l2) {
        var mylist1 = l1;
        var mylist2 = l2;
        var c3;
        var l3;
        var carry = 0;
        while(mylist1 || mylist2|| carry){
            var value1 = 0;
            var value2 = 0;
            var sum = 0;
            if(mylist1)
            {
                value1 = mylist1.val;
                mylist1 = mylist1.next;            
            }
            if(mylist2)
            {
                value2 = mylist2.val;
                mylist2 = mylist2.next;
            }
            sum = value1 + value2 + carry;
            carry = Math.floor(sum / 10);
            if (!c3) {
                l3 = new ListNode(sum % 10);
                c3 = l3;
            } else {
              c3.next = new ListNode(sum % 10);
              c3 = c3.next;
            }
        }
        return l3;
    };
    

    踩坑:之前没有用c3代替l3向下遍历,导致最后输出的结果是最后一个对象

    参考博客:JavaScript 版链表算法题:两个数相加

    相关文章

      网友评论

          本文标题:LeetCode之两数相加——JavaScript实现

          本文链接:https://www.haomeiwen.com/subject/qygbsqtx.html