题目说明
你一个链表的头节点 head ,判断链表中是否有环。
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。
示意图:
方法一
思路:
如果链表中没有环的话我们遍历完整个链表每个节点只会被访问一次,相反如果链表中有环一次会存在某个节点重复访问的情况。
因此我们用一个hash表记录访问过的链表,当有重复时就代表链表中存在环。
public boolean hasCycle(ListNode head) {
/*
* 用一个哈希表记录访问过的节点,当链表节点重复时代表当前的链中存在环
*/
if(head==null){
return false;
}
ListNode p = head;
Set<ListNode> set = new HashSet<>();
while(p!=null){
if(!set.add(p)){
return true;
}
p = p.next;
}
return false;
}
算法分析
我们最多循环完整个链表就可以知道链表中是否存在环,因此该算法的时间复杂度为O(n)
空间复杂度&#