给定一个链表,判断链表中是否有环。
https://leetcode-cn.com/problems/linked-list-cycle/
class HasCircle{
//Set集合:遍历链表,将指针到过的元素加入set,如果set中有重复,说明链表有环
public boolean hasCycle2(ListNode head) {
if (head == null){
return false;
}
Set<ListNode> set = new HashSet<>();
ListNode temp = head;
while (temp.next != null){
if (!set.add(temp)){
return true;
}
temp = temp.next;
}
return false;
}
//快慢指针:快指针每次走两步,慢指针走一步,如果快慢指针相遇,说明链表有环
public boolean hasCycle(ListNode head) {
if (head == null){
return false;
}
ListNode slow = head;
ListNode fast = head.next;
while (fast.next != null && fast != null){
if (slow == fast){
return true;
}
slow= slow.next;
fast = fast.next.next;
}
return false;
}