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));