增加两个链表和输出结果以JavaScript一个新的链表的讨论

问题描述 投票:0回答:2

题:

您将得到代表两个非负整数两个非空链表。数字存储在相反的顺序,并且每个它们的节点的包含单个数字。添加两个数字,并返回它作为一个链表。

你可以假设这两个数字不包含任何前导零,除了数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();

任何的意见都将会有帮助。

javascript data-structures linked-list addition
2个回答
2
投票

当你声明

let resultPointer = new ListNode(0);

它创建了一个新的链接列表。它不与任何temp任何连接。然后while循环执行后,您resultPointer指向列表的最后一个条目,它不具有任何链表进一步为该指针。所以,当你返回resultPointer.next() - 它实际上是一个空列表。

相反 - 在您建议的解决方案,temp实际上是链表的头。对于迭代 - 它使用resultPointer。因此,即使在执行while循环后,temp仍是链表的头。于是久违temp.next()实际上是进一步恢复列表以链表的那头。

希望帮助。


0
投票

注意:这不是一个答案!

有您的代码一些错误;你应该将最后一位数字后加另一个维度,否则当你有残留,它会给出错误的结果;

9 8

2 2

结果:20

因为,在未来这种不正当性,你必须在列表中添加的最后结转;

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

这将增加在列表中的最后结转;

© www.soinside.com 2019 - 2024. All rights reserved.