思路
定义快慢指针 快指针一次走两步 慢指针一次走一步 如果链表有环则快慢指针一定能在环中相遇(类似追及问题)
快慢指针的间隔为1 否则可能出现每次追击恰好错过的情况导致死循环
代码实现
public class Solution {
public boolean hasCycle(ListNode head) {
if(head == null){
return false;
}
ListNode fast = head;
ListNode slow = head;
//定义快慢指针
while(fast != null && fast.next != null){
//条件循环条件不能反
fast = fast.next.next;
//快指针一次走两步
slow = slow.next;
//慢指针一次走一步
if(slow == fast){
return true;
}
}
return false;
}
}