题目链接:https://leetcode-cn.com/problems/linked-list-cycle/
思路:可能初学者想不到这个方法,就是用「快慢指针」,快指针每次走2步,慢指针每次走1步,如果链表有环必然两者会相遇。打个比方,A和B在同一个环形操场中同一方向跑步,A比B快,一开始A远远超过B,过了一段时间由于A跑的比B快了一圈,然后两者再次相遇。
注意要考虑极端情况,没有节点或者只有一个节点是不存在「环」的。
var hasCycle = function(head) {
let fast = head;
let slow = head;
while(slow !== null && fast !== null && fast.next !== null) {
// 注意判断条件,slow !== null && fast !== null确保链表有节点,
// fast.next !== null确保至少有1个节点
slow = slow.next;
fast = fast.next.next;
if(slow === fast) {
return true;
}
}
return false;
};