gpt4 book ai didi

Javascript 链接列表合并返回未定义

转载 作者:行者123 更新时间:2023-12-01 01:26:34 25 4
gpt4 key购买 nike

尝试合并 LeetCode 中的两个排序列表问题,不断遇到未定义的结果:

/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} l1
* @param {ListNode} l2
* @return {ListNode}
*/
var mergeTwoLists = function(l1, l2) {
var res = new ListNode();
var curr = res;
while(l1 !== null && l2 !== null) {
if(l1.val <= l2.val) {
// Set current node to l1 if less than or equal
curr = l1;
// Move l1's head to next
l1 = l1.next
} else {
// Else same case for l2
curr = l2;
l2 = l2.next;
}
// Move current to next
curr = curr.next
}

if (l1 !== null) {
curr = l1;
} else if (l2 !== null) {
curr = l2;
}

return res;
};

不知道为什么 res 返回未定义。据我所知,我将 res 设置为生成的链表节点的 head 指针,并执行以下逻辑:

L1L2 尚未到达末尾时,比较值。
IF L1.val 小于或等于到 L2.val,将其设置为当前节点,然后将 L1 的指针向上移动到下一个值。
否则为L2做镜像。

设置当前节点值后,将节点提升到下一个项目(L1.nextL2.next,该节点将被下一个项目覆盖)任一列表中较大的值)并重复。

一旦到达L1L2的末尾,将剩余的链表设置为当前节点,然后返回头res完整列表的指针。

不确定我的逻辑哪里出了问题,也许有点晚了哈哈。如果重复出现这种情况,我们深表歉意,感谢您的帮助!

最佳答案

当您执行current = res时,它会将current所持有的引用从res更新为l1/l2。为了避免这种情况,您要做的就是设置 currentnext 节点,而不是变量 current 本身。以下代码有效 -

var mergeTwoLists = function(l1, l2) {
var res = new ListNode();
var curr = res;
while(l1 !== null && l2 !== null) {
if(l1.val <= l2.val) {
// Set current node to l1 if less than or equal
curr.next = l1;
// Move l1's head to next
l1 = l1.next
} else {
// Else same case for l2
curr.next = l2;
l2 = l2.next;
}
// Move current to next
curr = curr.next
}

if (l1 !== null) {
curr.next = l1;
} else if (l2 !== null) {
curr.next = l2;
}

return res.next;
};

关于Javascript 链接列表合并返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53718757/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com