当前位置: 首页 > 知识库问答 >
问题:

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

乐钱青
2023-03-14

问题:

给定两个非空链表,表示两个非负整数。数字以相反的顺序存储,每个节点包含一个数字。将这两个数字相加,并以链表形式返回。

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

任何建议都会有帮助。

共有2个答案

姜奇
2023-03-14

这不是答案!

你的代码有问题;您应该添加另一个维度,否则当您添加最后一位后有结转时,将给出错误的结果;

9 8

2 2

结果:20

因为,在这个错误之后,你必须在列表中添加最后一个结转;

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

这将添加列表中的最后一个结转;

欧阳博超
2023-03-14

当你申报时

let resultPointer = new ListNode(0);

它会创建一个新的链表。它与temp没有任何连接。然后在执行while循环之后,您的resultPointer指向该列表的最后一个条目,并且它没有任何指向该指针的链接列表。因此,当您返回resultPointer时。next()-它实际上是一个空列表。

相反,在您建议的解决方案中,temp实际上是链接列表的标题。对于迭代-它使用resultPointer。因此,即使在执行while循环之后,temp仍然是链表的头。所以返回temp。next()实际上是将列表进一步返回到链接列表的头部。

希望有帮助。

 类似资料:
  • 我有一个关于使用LeetCode的链表添加两个数字的问题。下面是问题本身,我面临的问题,以及我的代码。 给您两个非空链表,表示两个非负整数。数字按相反顺序存储,每个节点包含一个数字。将这两个数字相加,并将其作为链表返回。 您可以假设这两个数字不包含任何前导零,除了数字0本身。 实例 输入:(2- 问题是它打印出: 当结果出现时,它停止。val为0并调用NullPointerException。我不

  • 21. Merge Two Sorted Lists 问题 Merge two sorted linked lists and return it as a new list. 思路 这个题目很简单也有几个可以考虑的思路,一个是比较直接的方式,重新构造链表,一种是利用递归 思路1 :用新的链表 这里用了一个新的节点了保存结果的链表,这里为了方便链表的扩充,增加一个临时的节点变量(否则每次加入都要遍

  • 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4] 示例 2: 输入:l1 = [], l2 = [] 输出:[] 示例 3: 输入:l1 = [], l2 = [0] 输出:[0] 首先先给出链表节点ListNo

  • 问题:给您两个非空链表,表示两个非负整数。数字按相反顺序存储,每个节点包含一个数字。将这两个数字相加,并将其作为链表返回。您可以假设这两个数字不包含任何前导零,除了0本身** 示例:工作测试用例如下:-输入:(2)- 我的解决方案不适用于以下测试用例: 输入: 单链表的定义: 这就是我的解决办法

  • 023. Merge k Sorted Lists [H] 问题 Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. Subscribe to see which companies asked this question 思路 这题明显就是Merge

  • NowCoder 题目描述 解题思路 设 A 的长度为 a + c,B 的长度为 b + c,其中 c 为尾部公共部分长度,可知 a + c + b = b + c + a。 当访问链表 A 的指针访问到链表尾部时,令它从链表 B 的头部重新开始访问链表 B;同样地,当访问链表 B 的指针访问到链表尾部时,令它从链表 A 的头部重新开始访问链表 A。这样就能控制访问 A 和 B 两个链表的指针能同