添加两个链表并在javascript中的新链表讨论中输出结果
问题: 给您两个非空链表,表示两个非负整数。数字按相反顺序存储,每个节点包含一个数字。将这两个数字相加,并将其作为链表返回 您可以假设这两个数字不包含任何前导零,除了数字0本身 例如:添加两个链表并在javascript中的新链表讨论中输出结果,javascript,data-structures,linked-list,addition,Javascript,Data Structures,Linked List,Addition,问题: 给您两个非空链表,表示两个非负整数。数字按相反顺序存储,每个节点包含一个数字。将这两个数字相加,并将其作为链表返回 您可以假设这两个数字不包含任何前导零,除了数字0本身 例如: Input: (2 -> 4 -> 3) + (5 -> 6 -> 4) Output: 7 -> 0 -> 8 Explanation: 342 + 465 = 807. 建议的解决办法: function ListNode(val) { this.val = val;
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;
}
这将添加列表中的最后一个结转
if((sum/10) !== 0){
resultPointer.next = new ListNode(sum / 10);
resultPointer = resultPointer.next;
}