返回未定义的Javascript链表合并
试图合并LeetCode中的两个排序列表问题,继续运行到未定义的结果:返回未定义的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
/**
* 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
的控制。嗯,我明白了。。。