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
。如果 fast
是 null
,那么评估 fast.next
将是一个错误——这就是您在“简化”条件时遇到的情况。
如果 fast
是 null
那么表达式 fast
将是“假的”,并且由于 &&
运算符的工作方式 (short-circuiting) ,然后计算将停止并且不会尝试计算 fast.next
。相反,它会认为整个表达式是假的,并退出循环。
我在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
。如果 fast
是 null
,那么评估 fast.next
将是一个错误——这就是您在“简化”条件时遇到的情况。
如果 fast
是 null
那么表达式 fast
将是“假的”,并且由于 &&
运算符的工作方式 (short-circuiting) ,然后计算将停止并且不会尝试计算 fast.next
。相反,它会认为整个表达式是假的,并退出循环。