使用快慢指针判断链表中是否有环

使用快慢指针判断链表中是否有环

思路:

慢指针p1每次移动一个结点位置,快指针p2每次移动两个结点位置,若有环,快慢指针必相遇
注意while判断语句为while( p1->next&&p2->next&&p2->next->next )
若p2->next为空,将不再执行p2->next->next

代码:

  struct ListNode {
      int val;
      struct ListNode *next;
  };
  bool hasCycle(struct ListNode *head) {
    if( head==NULL )
        return false;
    struct ListNode *p1,*p2;
    p1=p2=head;
    while( p1->next&&p2->next&&p2->next->next )
    {
        if( p1->next==p2->next->next )
            return true;
        else
        {
            p1=p1->next;
            p2=p2->next->next;
        }
    }
    return false;
}

猜你喜欢

转载自blog.csdn.net/qq_44709990/article/details/105604898