「这是我参与11月更文挑战的第1天,活动详情查看:2021最后一次更文挑战」
LeetCode 141. 环形链表
题目要求
给定一个链表,判断链表中是否有环。如果链表中存在环,则返回 true 。 否则,返回 false 。
示例
思路
用快慢指针,如果两个指针相遇说明这个链表是有节点的
1.声明两个变量(指针)
let slow = head;
let fast = head;
2.当慢指针 快指针和快指针的下一个节点有值的时候就分别向后走一步,没有值的时候就说明这个指针没有环
while (slow && fast && fast.next) {
slow = slow.next;
fast = fast.next.next;
}
return false;
3.当快指针没有值的时候,说明已经走完了所有节点,并且没有环
if (fast != null) return false;
4.当快慢指针相等的时候,说明有环
快指针一次走两步,慢指针一次走一步,如果有环,快指针终究可以追上慢指针;
if (fast == slow) return true;
完整代码
var hasCycle = function(head) {
let slow = head;
let fast = head;
while (slow && fast && fast.next) {
slow = slow.next;
fast = fast.next.next;
if (fast == null) return false;
if (fast == slow) return true;
}
return false;
};