给你一个链表的头节点
head
,判断链表中是否有环。注意:如果链表中有某个节点,可以通过连续跟踪
next
指针再次到达,则链表中存在环。解题思路:快慢指针法
建立两个指针,都从头指针开始,快指针一次走两步,慢指针一次走一步,如果两个指针相遇则证明链表有环,若在快指针到链表尾时,两指针未相遇则证明链表没有环。
bool hasCycle(struct ListNode *head) {
struct ListNode*p=head;//快指针
struct ListNode*q=head;//慢指针
while(p!=NULL&&p->next!=NULL)
{
p=p->next->next;
q=q->next;
if (p==q)
{
break;
}
}
if (p==NULL||p->next==NULL)
{
return false;
}
return true;
}