使用快慢指针判断链表中是否有环
思路:
慢指针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;
}