函数:

 1 ListNode* MeetingNode(ListNode* pHead)
 2 {
 3     if(pHead==nullptr)
 4         return nullptr;
 5     ListNode* quickNode=pHead;
 6     ListNode* slowNode=pHead;
 7 
 8     while(quickNode->m_pNext!=nullptr&&quickNode->m_pNext->m_pNext!=nullptr)
 9     {
10         quickNode=quickNode->m_pNext->m_pNext;
11         slowNode=slowNode->m_pNext;
12         if(quickNode==slowNode)
13             break;
14     }
15     if(quickNode!=slowNode)
16     {
17         return nullptr;
18     }
19     return slowNode;
20 }
21 
22 ListNode* EntryNodeOfLoop(ListNode* pHead)
23 {
24     ListNode* meetingNode=MeetingNode(pHead);
25     if(meetingNode==nullptr)
26         return nullptr;
27     int nodesInLoop=1;
28     ListNode* pTemp=meetingNode;
29     while(pTemp->m_pNext!=meetingNode)
30     {
31         pTemp=pTemp->m_pNext;
32         nodesInLoop++;
33     }
34     ListNode* quickNode=pHead;
35     ListNode* slowNode=pHead;
36     for(int i=0;i<nodesInLoop;i++)
37         quickNode=quickNode->m_pNext;
38     while(slowNode!=quickNode)
39     {
40         quickNode=quickNode->m_pNext;
41         slowNode=slowNode->m_pNext;
42     }
43     return slowNode;
44 }
View Code

相关文章: