
提示:
- 链表中节点的数目范围是
[0, 104] -105 <= Node.val <= 105pos为-1或者链表中的一个 有效索引 。
进阶: 你能用 O(1)(即,常量)内存解决此问题吗?
java
/**
* Definition for singly-linked list.
* class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public boolean hasCycle(ListNode head) {
//定义快慢指针
ListNode slow = head;
ListNode fast = head;
//只要当前节点不为null,并且下一个节点不为null就继续
while(fast != null && fast.next != null){
//慢指针一次一步,快指针一次两步
slow = slow.next;
fast = fast.next.next;
//两个相遇,说明是环
if(slow == fast){
return true;
}
}
//跑到尽头为null,不是环
return false;
}
}
快指针只能每次走2步,不能是3步,因为三步可能导致直接越过慢指针,会多绕几圈才能碰到。