判断链表中是否有环
方法一
使用一个集合,遍历链表,检查每一个链表的节点是否已经遍历过,即存在环,如果不存在环则可以遍历到最后一个节点得next(null)。
这种方法的时间复杂度为O(n)。
方法二
在处理链表问题中快慢指针可以解决很多问题。也可以用于解决本题。
如果有环,则快慢指针必会相遇。
这种方法的时间复杂度为O(1)。
public boolean hasCycle(ListNode head) {
ListNode fast = head;
ListNode slow = head;
while (fast != null && fast.next != null)
{
fast = fast.next.next;
slow = slow.next;
if (fast == slow)
{
return true;
}
}
return false;
}