// 有没有环 以及环的入口
ListNode meetingNode(ListNode *pHead;)
{
if(pHead == NULL)
return ;
ListNode *pSlow = pHead->next;
if(pSlow == NULL) return ;
ListNode *pFast = pHead->next;
if(pFast == NULL) return;
while(pSlow != NULL && pFast != NULL)
{
if(pFast == pSlow)return pFast;
pSlow = pSlow->next;
pFast = pFast->next;
if(pFast != NULL)
pFast = pFast->next;
}
return NULL;
}
ListNode *EntryNodeOfLoop(ListNode *pHead)
{
ListNode *meetingNode = MeetingNode(pHead);
if(meetingNode == NULL)return;
int nodesInLoop = 1;//环节点的个数
ListNode * pNode1 = meetingNode;
while(pNode1->next != meetingNode)
{
pNode=pNode->next;
nodesInLoop++;
}
pNode1 = pHead;//pNode1
int i;
for(i = 0;i<nodesInLoop;i++)
{
pNode1->pNode1->next; //前进环的个数
}
ListNode *pNode2 = pHead;//pNode2
while(pNode1 != pNode2)
{
pNode1 = pNode1->next;
pNode2 = pNode2->next;
}
return pNode1
}