方法与思路:
具体不需要什么思路,如题所示。注意进位问题,最高位为有进位的话,还得算上,这里容易遗漏。
代码
var l = new ListNode(0);//注意:返回值应该为l.next
var cur = l;//用来遍历链表
var carry = 0;//表示进位
while (l1 != null || l2 != null) {
let sum = 0;
if (l1 != null) {
sum += l1.val;
l1 = l1.next;
}
if (l2 != null) {
sum += l2.val;
l2 = l2.next;
}
sum += carry;
cur.next = new ListNode(sum % 10);
cur = cur.next;
carry = Math.floor(sum / 10);//这里和c++语言不一样,需要向下取整,注意
}
if (carry) {//处理[1 1 9]+[1 1 9] 这种最后还有进位的用例
cur.next = new ListNode(carry);
}
return l.next;
难点
对我来说,js的单链表有些不熟。(我之前都是用的c、c++)
下面代码有助于理解题目中给出的单链表的声明与使用。
如何构建一个1->2-null的单链表:
function ListNode(val, next) {
this.val = (val===undefined ? 0 : val)
this.next = (next===undefined ? null : next)
}
//注意以下方法返回的l1.val是0,是无用的
var list = new ListNode(); //l1为:ListNode { val: 0, next: null }
var cur = list; //cur为:ListNode { val: 0, next: null } cur用来遍历
cur.next = new ListNode(1);
cur = cur.next;
cur.next = new ListNode(2);
cur = cur.next;
console.log(list);
js知识点
Math.floor(5.1234); // 5 向下取整
Math.ceil(5.1234); // 6 向上取整
parseInt(5.1234); // 5 保留整数部分
Math.round(5.1234); // 5 四舍五入
Math.round(5.6789); // 6 四舍五入
Math.abs(-1); // 1 取绝对值
Math.max(1,2); // 2 返回两数中的较大者
Math.min(1,2); // 1 返回两数中的较小者
Math.random(); // 随机数(0-1)