两数相加JavaScript

两数相加题目详情:https://leetcode-cn.com/problems/add-two-numbers/description/


对博主而言,这道题可能更侧重JavaScript如何去实现链表的操作。不过leetcode题解注释中已经指明了链表的方式。
参考博客如下:http://www.liuyiqi.cn/2017/03/12/add-two-numbers/

/**
 * 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) {
    //carry为进位,初始化为0   
    var c1 = l1, c2 = l2, c3, l3, carry = 0;

    while(c1 || c2 || carry) {
        var v1 = 0, v2 = 0;

        if(c1) {
            //根据前文给出的代码结构val、next
            v1 = c1.val;
            c1 = c1.next;
        }

        if (c2) {
            v2 = c2.val;
            c2 = c2.next;
        }

        var sum = v1 + v2 + 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;

};

总结:这道题的思路本身也不太难,主要考察的是对链表的操作,要理解链表的组成方式,增删查的方式。另一个就是按位进行加法计算,需要考虑进位(数a+数b+进位cin,返回数c和新的进位cin)。
因为链表和按位加法都还算的上有一点基础,但用JavaScript写以及其对链表的操作委实不熟,所以查阅了一些js链表的博客。推荐如下:
https://juejin.im/entry/59cb70995188256aa423b680
http://web.jobbole.com/88843/

你可能感兴趣的:(算法,#,JavaScript)