- JS链表相关操作
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);
-
解题思路
联想到小学的进位计算,满10进1
每个结点将上一节点和除10取整,与当前结点和的除余10取整相加
注意最高位为有进位的话,还得算上,这里容易遗漏 -
代码
var addTwoNumbers = function(l1, l2) {
var arr = new ListNode(0);
var l = arr;
var max = 0;
while(l1 != null || l2 != null) {
var sum = 0;
if(l1 != null) {
sum += l1.val;
l1 = l1.next;
}
if(l2 != null) {
sum += l2.val;
l2 = l2.next;
}
sum += max;
l.next = new ListNode(sum % 10);
l = l.next;
max = Math.floor(sum / 10);
}
if(max) {
l.next = new ListNode(max);
}
return arr.next;
};