题:
您将得到代表两个非负整数两个非空链表。数字存储在相反的顺序,并且每个它们的节点的包含单个数字。添加两个数字,并返回它作为一个链表。
你可以假设这两个数字不包含任何前导零,除了数0本身。
例:
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
Explanation: 342 + 465 = 807.
建议的解决方案:
function ListNode(val) {
this.val = val;
this.next = null;
}
// adding two Linked Lists.
var addTwoNumbers = function(l1, l2) {
const temp = new ListNode(0);
let resultPointer = temp;
var digit = 0;
var carryover = 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 = sum + carryover;
carryover = sum >= 10 ? 1 : 0;
resultPointer.next = new ListNode(sum % 10);
resultPointer = resultPointer.next;
}
return temp.next;
};
输出:[7,0,8];
为什么以下更改输出[]列表。
let resultPointer = new ListNode(0);
return resultPointer.next();
任何的意见都将会有帮助。
当你声明
let resultPointer = new ListNode(0);
它创建了一个新的链接列表。它不与任何temp
任何连接。然后while循环执行后,您resultPointer
指向列表的最后一个条目,它不具有任何链表进一步为该指针。所以,当你返回resultPointer.next()
- 它实际上是一个空列表。
相反 - 在您建议的解决方案,temp
实际上是链表的头。对于迭代 - 它使用resultPointer
。因此,即使在执行while循环后,temp
仍是链表的头。于是久违temp.next()
实际上是进一步恢复列表以链表的那头。
希望帮助。
注意:这不是一个答案!
有您的代码一些错误;你应该将最后一位数字后加另一个维度,否则当你有残留,它会给出错误的结果;
9 8
2 2
结果:20
因为,在未来这种不正当性,你必须在列表中添加的最后结转;
if((sum/10) !== 0){
resultPointer.next = new ListNode(sum / 10);
resultPointer = resultPointer.next;
}
这将增加在列表中的最后结转;