Javascript中的链表回文Leetcode解决方案

Linked List Palindrome Leet Code Solution in Javascript

我在Javascript.

中查找了回文题的解法

有一行代码我不是很懂,希望高手赐教

解决方法如下:

this.palindrom = function() {
            //two pointers to find the middle 
            // 1 slow pointer - move 1 at a time
            // 1 fast pointer - move 2 at a time 

        let slow = this.head
        let fast = this.head
        let start = this.head
        console.log('fast', fast)
        let length = 0 
       
        while( fast && fast.next) {
            fast = fast.next.next
            slow = slow.next 
            start = start.next
            length++
        }
        console.log(slow)
       let mid = this.reverse(slow)
        console.log('mid',mid)
        while (length !== 0) {
            length --
            if (mid.data !== start.data) return false 
            else return true 
        }

      }
    }

我不明白为什么“while”循环的参数是

while( fast && fast.next)

我输入了 while(fast.next) 并出现错误,提示无法访问 null of next。我想知道为什么 fast && fast.next 会起作用。

fast && fast.next 正在对 fast 实施保护措施 null。如果 fastnull,那么评估 fast.next 将是一个错误——这就是您在“简化”条件时遇到的情况。

如果 fastnull 那么表达式 fast 将是“假的”,并且由于 && 运算符的工作方式 (short-circuiting) ,然后计算将停止并且不会尝试计算 fast.next。相反,它会认为整个表达式是假的,并退出循环。