LeetCode141:Given a linked list, determine if it has a cycle in it.
给定链表,判断是否存在环
1、该题的思路,如果使用额外空间,解决就很容易。我们用map存储每个节点引用,如果该引用的值大于1,就说明在该位置存在环。
public boolean hasCycle(ListNode head)
{
if (head == null)
return true;
if (head.next == null && head.next == head)
return false;
Map<ListNode, Integer> map = new HashMap<ListNode, Integer>();
ListNode p = head;
while (p != null)
{
if (map.containsKey(p)&&map.get(p) == 1)
return true;
map.put(p, 1);
p = p.next;
}
return false;
}
同样可以用该方法返回环存在的位置
public ListNode detectCycle(ListNode head)
{
if (head == null)
return null;
if (head.next == null && head.next == head)
return head;
Map<ListNode, Integer> map = new HashMap<ListNode, Integer>();
ListNode p = head;
while (p != null)
{
if (map.containsKey(p) && map.get(p) == 1)
return p;
map.put(p, 1);
p = p.next;
}
return null;
}