题目:判断给定单链表是否有环
基本思路:设置两个指针p1、p2,p1每次进一步,p2每次进两步,如果无环p2会先到达链表尾,如果有环p1与p2终会相遇。
代码:
struct ListNode
{
int data;
ListNode* next;
};
bool hasCircle(ListNode* head)
{
ListNode* p1 = head;
ListNode* p2 = head;
do
{
if (p2 == NULL | p2->next == NULL )
{
return false;
}
p1 = p1->next;
p2 = p2->next->next;
} while (p1 != p2);
return true;
}