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;
}
}
用快慢指针来跑圈,如果存在环,则会相遇
这篇博客介绍了两种检测链表中是否存在环的方法:一种是利用哈希集合记录节点,时间复杂度为O(N);另一种是通过快慢指针,如果链表有环,快指针最终会与慢指针相遇。这两种方法都是算法面试中的常见题型。
313

被折叠的 条评论
为什么被折叠?



