1.快慢指针
时间复杂度O(n)
空间复杂度O(1)
public boolean hasCycle (ListNode head){
if(head == null){
return false;
}
ListNode slow = head;
ListNode fast = head;
while ( fast.next != null && fast.next.next !=null){
slow = slow.next;
fast = fast.next.next;
if(slow == fast){
return true;
}
}
return false;
}
2.哈希表(HashSet)
时间复杂度O(n)
空间复杂度O(n)
Set<ListNode> set = new HashSet<>();
while (head!=null){
if(!set.add(head)){
return true;
}
head = head.next;
}
return false;