public class Solution {
public boolean hasCycle(ListNode head) {
Set<ListNode> seen = new HashSet<>();
while(head != null){
if(!seen.add(head)){
return true;
}
head = head.next;
}
return false;
}
}
用Hashset来记录ListNode,比较简单,但是复杂度O(N)
public class Solution {
public boolean hasCycle(ListNode head) {
if(head == null || head.next == null) return false;
ListNode slow = head;
ListNode fast = head.next;
while(fast != null && fast.next != null){
if(fast == slow) return true;
slow = slow.next;
fast = fast.next.next;
}
return false;
}
}
用快慢指针来跑圈,如果存在环,则会相遇