给你一个链表的头节点 head ,判断链表中是否有环。
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。
如果链表中存在环 ,则返回 true 。 否则,返回 false 。
?
示例 1:
?? ?输入:head = [3,2,0,-4], pos = 1
?? ?输出:true
示例 2:
?? ?输入:head = [1,2], pos = 0
?? ?输出:true
示例 3:
?? ?输入:head = [1], pos = -1
?? ?输出:false
解析: 采用容器set的不会重复插入的属性,将节点插入到容器中;
? ? ? ? ? ?当循环插入到已经有的节点的时候,说明有重复。
示例源码:
bool hasCycle(ListNode *head)
{
unordered_set<ListNode*> seen;
while (head != nullptr)
{
if (seen.count(head) !=0 )
{
return true;
}
seen.insert(head);
head = head->next;
}
return false;
}