题目描述
给你一个链表的头节点 head ,判断链表中是否有环。
如果链表中存在环,则返回 true 。 否则,返回 false 。
快慢节点思路分析
-
快慢指针,顾名思义,首先需要两个指针,一快一慢
-
慢指针指向第一个变量,快指针指向下一个,每次向后移动,慢指针每次走一步,快指针每次走两步。
-
如果链表有环,则快慢指针一定会相遇
-
如果快慢指针相遇,则链表有环
-
如果快指针结束,则链表无环
代码实现
var hasCycle = function (head) {
if (!head || !head.next) return false;
let preNode = head;
let nextNode = head.next;
while (preNode !== nextNode) {
if (!nextNode || !nextNode.next) return false;
preNode = preNode.next;
nextNode = nextNode.next.next;
}
return true;
};