添加两个链表并在javascript中的新链表讨论中输出结果

添加两个链表并在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;

问题:

给您两个非空链表,表示两个非负整数。数字按相反顺序存储,每个节点包含一个数字。将这两个数字相加,并将其作为链表返回

您可以假设这两个数字不包含任何前导零,除了数字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;
}
这将添加列表中的最后一个结转

if((sum/10) !== 0){
      resultPointer.next = new ListNode(sum / 10);
      resultPointer = resultPointer.next;
}