[英]how to understand while loop - linked list
所以我自己學習,並遇到了這段代碼來反轉鏈表:
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) 是如何工作的。 我的猜測是,當到達尾節點並調用.next 時,它變成了 node.next 變得未定義,這反過來又打破了 while 循環。 但是,我並不肯定這種情況。
IIRC 它在語義上等於:
next = node.next
while (next)
{
// ...
}
這意味着,當next == null
(或任何虛假值)時,循環的條件為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
}
在 JavaScript(以及許多其他具有這種語法的語言)中,賦值語句的結果是賦值。 因此,在這種情況下,while 會評估每個節點,它要么是一個值,要么不是一個值。 這樣您就可以像x = y = 5
這樣的鏈接分配,而且您也可以將它們評估為條件。 請參閱: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Assignment
你是對的。 正如您所指出的, while
循環在node.next
變為undefined
時停止執行。 它使用next = node.next
的右側作為條件。 在這種情況下node.next
。
為了說明我的觀點,請考慮以下代碼:
let i = 0
const values = [1, 2, undefined, 3]
while (x = values[i]) {
console.log(x);
i += 1;
}
這將打印:
1
2
在達到undefined
的那一刻停止執行(任何Falsy值都會產生相同的效果)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.