两数相加题目详情: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/