具体分析可见http://blog.csdn.net/libin1105/article/details/48267113
需要指出的是,上述博客中2*(a+b)=a+b+c+b应该改为2*(a+b)=a+b+(c+b)*n,其中n为自然数。
然后得到关系式a=(b+c)*n-b
由此可见两个指针会相遇在环的入口。
1 class Solution { 2 public: 3 ListNode* EntryNodeOfLoop(ListNode* pHead) 4 { 5 if(pHead==NULL||pHead->next==NULL) 6 return NULL; 7 ListNode* one=pHead; 8 ListNode* two=pHead; 9 do{ 10 two=two->next; 11 two=two->next; 12 one=one->next; 13 }while(one!=two); 14 ListNode* newone=pHead; 15 while(two!=newone) 16 { 17 newone=newone->next; 18 two=two->next; 19 } 20 return two; 21 } 22 };
时间: 2024-10-15 12:57:53