题目链接
解题思路
双指针法
- 设置快慢指针
fast
和slow
,初始时都为head
节点 - 快指针一次走两步,慢指针一次走一步
- 那么加入有环,快指针一定先进入环里循环,慢指针也终将会进入环里面
- 因为快指针一次走两步,慢指针一次走一步,所以在环里两个指针终究会相遇,也就是快指针会追上慢指针
- 具体动图可以看下图
AC代码
public class Solution {
public boolean hasCycle(ListNode head) {
ListNode fast = head;
ListNode slow = head;
while(fast !=null && fast.next != null){
slow = slow.next;
fast = fast.next.next;
if(slow == fast){
return true;
}
}
return false;
}
}