javascript 解法:
var addTwoNumbers = function(l1, l2) {
var node1,node2;
var val ,pre = 0;
var head = true;
var HEAD ;
// 确保 node1,与 node2 有值
for( node1 = l1,node2 = l2; node1.hasOwnProperty("val") || node2.hasOwnProperty("val") || pre ;node1= node1.next || {},node2 = node2.next|| {} ){
val = ((node1.val || 0)+ ( node2.val || 0) + pre) % 10;
pre = Math.floor(((node1.val || 0)+ ( node2.val || 0) + pre) / 10);
// console.log(val,pre)
// 形成链表
if(head){
HEAD = new ListNode(val);
head = false;
lastNode = HEAD;
continue;
}
lastNode.next = new ListNode(val);
lastNode = lastNode.next;
}
//处理单节点链表
if(head){
val = ((l1.val || 0)+ ( l2.val || 0) + pre) % 10;
pre = Math.floor(((node1.val || 0)+ ( node2.val || 0) + pre) / 10);
HEAD = new ListNode(val);
if(pre){
HEAD.next = new ListNode(pre);
}
}
return HEAD;
};
下面的话,都是错的。是我没能理解题意。代码保留,供有需要的人,对比学习。
这一题的话,本质不难。但我使用的JavaScript有点麻烦。首先,在节点的定义上,原题给的就是一个错误的定义,不能使用。修改定义后,发现题目的测试案例又不是用的定义给的,而是用数组代表这个链表。这个跟原题意,使用链表的解法完全不是同一个难度等级。
最后,提交问题。本地一直是成功的,但到了提交平台上,一直返回了undefined ,像是对函数内部进行了异步调用。
数组解法:
var addTwoNumbers = function(l1, l2) {
var result = [];
for(var i = 0 ,pre = 0; i<l1.length || i<l2.length || pre; i++){
result.push( ( (l1[i]||0) + (l2[i]||0) + pre )%10 );
pre = Math.floor( ( (l1[i]||0) + (l2[i]||0) + pre)/10 );
if( i>=l1.length-1 && pre ==0){
return result;
}
}
// return result;
};
链表解法: 包含节点定义的修改
function ListNode(val) {
var aa = {};
aa.val = val;
aa.next = null;
return aa;
}
var addTwoNumbers = function(l1, l2) {
var node1,node2;
var val ,pre = 0;
var head = true;
var HEAD ;
// 确保 node1,与 node2 有值
for( node1 = l1,node2 = l2; node1.next || node2.next || pre ;node1= node1.next || 1,node2 = node2.next|| 1 ){
val = ((node1.val || 0)+ ( node2.val || 0) + pre) % 10;
pre = Math.floor(((node1.val || 0)+ ( node2.val || 0) + pre) / 10);
console.log(val,pre)
// 形成链表
if(head){
HEAD = ListNode(val);
head = false;
lastNode = HEAD;
continue;
}
lastNode.next = ListNode(val);
lastNode = lastNode.next;
}
return HEAD;
};
链表解法测试案例:
var l1 = ListNode(2);
l1.next = ListNode(4)
l1.next.next = ListNode(3)
var l2 = ListNode(5)
l2.next = ListNode(6)
l2.next.next = ListNode(4)
// console.log(addTwoNumbers(l1,l2));