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;
}
本文介绍了一种利用哈希表检测链表中是否存在环的方法,并提供了相应的Java代码实现。通过存储节点引用的方式,可以有效地判断链表是否包含环以及定位环的起始位置。
374

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



