ListNode* EntryNodeOfLoop(ListNode* pHead)
{
bool haveCircle = false;
if (pHead == NULL || pHead->next == NULL) //空链表或只有一个节点
return NULL;
ListNode *slow = pHead;
ListNode *fast = pHead;
while (fast->next != NULL &&fast->next->next != NULL)
{
slow = slow->next;
fast = fast->next->next;
if (fast == slow)
{
haveCircle = true;
break;
}
}
if (!haveCircle)
return NULL;
slow = pHead;
//有个公式,遇到相等节点后一个从开头走再遇到就是入口
//不用公式的话就求环的节点数,然后快慢指针,快的先走n
while (slow != fast)
{
slow = slow->next;
fast = fast->next;
}
return slow;