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时停止