pListNode* List_Ls_have_Loop(pListNode* pList)
{
if (NULL == pList)
return NULL;
pListNode* pFast = pList;
pListNode* pSlow = pList;
while (pSlow&&pFast->next)
{
pFast = pFast->next->next;
pSlow = pSlow->next;
if (pFast == pSlow)
return pFast;
}
return NULL;
}
int Length_Of_Loop(pListNode* pList)
{
pListNode* Meet = List_Ls_have_Loop(pList);
pListNode* Temp = NULL;
if (Meet)
Temp = Meet->next;
size_t count = 0;
while (Temp->next != Meet)
{
Temp = Temp->next;
count++;
}
return count;
}
pListNode* List_Enter(pListNode* pList)
{
if (NULL == pList)
return NULL;
pListNode* pHead = pList;
pListNode* Meet = List_Ls_have_Loop(pList);
pListNode* pMeet = Meet;
if (Meet)
{
while (pMeet !=pHead)
{
pHead = pHead->next;
pMeet = pMeet->next;
}
return pMeet;
}
return NULL;
}