Javascript 如何理解while循环链表
因此,我正在自学,并遇到了以下代码,用于反转链表:Javascript 如何理解while循环链表,javascript,algorithm,Javascript,Algorithm,因此,我正在自学,并遇到了以下代码,用于反转链表: function reverseLinkedList(linkedList) { let node = linkedList.head; let first = node; let next = null; let prev = null; while (next = node.next) { node.next = prev; prev = node; node = next; } li
function reverseLinkedList(linkedList) {
let node = linkedList.head;
let first = node;
let next = null;
let prev = null;
while (next = node.next) {
node.next = prev;
prev = node;
node = next;
}
linkedList.head = node;
linkedList.head.next = prev;
linkedList.tail = first;
return linkedList;
}
现在我的问题是,如果while(next=node.next)不是条件语句,它是如何工作的。我猜它会变成node.next,当到达尾部节点并调用时,它会变得未定义。next,而这又会打破while循环。然而,我不能肯定情况确实如此。IIRC它在语义上等于:
next=node.next
while(下一个)
{
// ...
}
也就是说,当
next==null
(或任何falsy值)时,循环的条件为false
,因此循环终止。IIRC它在语义上等于:
while (next = node.next) {
node.next = prev;
prev = node;
node = next;
}
next=node.next
while(下一个)
{
// ...
}
也就是说,当next==null
(或任何falsy值)时,循环的条件是false
,因此循环终止
while (next = node.next) {
node.next = prev;
prev = node;
node = next;
}
与
next = node.next
while (next != NULL) {
node.next = prev;
prev = node;
node = next;
next = node.next
}
与
next = node.next
while (next != NULL) {
node.next = prev;
prev = node;
node = next;
next = node.next
}
在JavaScript(以及许多其他具有这种语法的语言)中,赋值语句的结果是赋值。因此,在本例中,while对每个节点求值,这些节点要么是值,要么不是值。这样,您可以像
x=y=5
那样链接赋值,但也可以将它们作为条件进行计算。请参阅:在JavaScript(以及其他许多使用这种语法的语言)中,赋值语句的结果是赋值。因此,在本例中,while对每个节点求值,这些节点要么是值,要么不是值。这样,您可以像x=y=5
那样链接赋值,但也可以将它们作为条件进行计算。请看:你说得对。正如您所指出的,while
循环停止执行节点。下一步
变为未定义
。它使用next=node.next
的右侧作为条件。在本例中为节点。下一步
为了说明我的观点,请考虑下面的代码:
设i=0
常量值=[1,2,未定义,3]
而(x=值[i]){
控制台日志(x);
i+=1;
}
这将打印:
1
2
当执行达到未定义时停止执行(任何值都会产生相同的效果)您是对的。正如您所指出的,
while
循环停止执行节点。下一步
变为未定义
。它使用next=node.next
的右侧作为条件。在本例中为节点。下一步
为了说明我的观点,请考虑下面的代码:
设i=0
常量值=[1,2,未定义,3]
而(x=值[i]){
控制台日志(x);
i+=1;
}
这将打印:
1
2
当执行到达
未定义的(任何值都会产生相同的效果)节点时停止执行。下一个是活动的,当它点击null时停止。下一个是活动的,当它点击null时停止