返回未定义的Javascript链表合并

返回未定义的Javascript链表合并,javascript,linked-list,Javascript,Linked List,试图合并LeetCode中的两个排序列表问题,继续运行到未定义的结果: /** * Definition for singly-linked list. * function ListNode(val) { * this.val = val; * this.next = null; * } */ /** * @param {ListNode} l1 * @param {ListNode} l2 * @return {ListNode} */ var merge

试图合并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;
};
/**
*单链表的定义。
*函数列表节点(val){
*this.val=val;
*this.next=null;
* }
*/
/**
*@param{ListNode}l1
*@param{ListNode}l2
*@return{ListNode}
*/
var mergeTwoLists=函数(l1,l2){
var res=new ListNode();
var curr=res;
而(l1!==null&&l2!==null){

如果(l1.val我可能是错的,但看起来你是在将
res
复制到
curr
。除非你是通过引用来做的,否则它应该单独处理。这意味着你对
curr
所做的所有更改都不会反映在
res

上。我可能是错的,但看起来你是在复制
curr

)ode>res
转换成
curr
。除非你是通过引用来做的,否则它应该单独处理。这意味着你对
curr
所做的所有更改都不会反映在
res
上,当你在做
current=res
时,它会将引用从
current
保持到
>l1
/
l2
。要避免这种情况,您要做的是设置
current
next
节点,而不是变量
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;
};
var mergetwolist=函数(l1、l2){
var res=new ListNode();
var curr=res;
而(l1!==null&&l2!==null){

如果(l1.val当您执行
current=res
时,它会将
current
保持的引用从
res
更新为
l1
/
l2
。要避免这种情况,您要做的是设置
current
下一个
节点,而不是变量
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;
};
var mergetwolist=函数(l1、l2){
var res=new ListNode();
var curr=res;
而(l1!==null&&l2!==null){

如果(l1.val认为这个JS的所有内容都是通过引用完成的。Object.assign work会在这里吗?如果一直是通过引用完成的,你会面临很多问题。但是看起来@shawon一针见血。认为这个JS的所有内容都是通过引用完成的。Object.assign work会在这里完成吗?如果一直是通过引用完成的,你会面临很多问题起诉。然而,看起来@shawon击中了要害。啊,我明白了,我用
l1/l2
引用覆盖了curr,从而失去了对
res
的控制。嗯,我明白了……啊,我明白了,我用
l1/l2
引用覆盖了curr,从而失去了对
res
的控制。嗯,我明白了。。。