思路:

    1. 用快慢指针判断有没有环(fast每次走两步,slow每次一步)
    2. 若有,返还相遇的指针,此时指针必定相遇在环中
    3. 遍历环,得到环的数目n
    4. 一个指针先走n步,另一个指针再开始走(它们的速度相同),它们相遇的地方就是入口(相当于“链表倒数第k个结点”)
    1. ListNode* EntryNodeOfLoop(ListNode* pHead)
    2. {
    3. if(!pHead || !(pHead->next))return NULL;
    4. ListNode* fast = pHead;
    5. ListNode* slow = pHead;
    6. while(fast && fast->next && fast->next->next){
    7. fast = fast->next->next;
    8. slow = slow->next;
    9. if(fast == slow)break;
    10. }
    11. if(!fast || !(fast->next) || !(fast->next->next))return NULL;
    12. fast = fast->next;
    13. int len = 1;
    14. while(fast != slow){
    15. fast = fast->next;
    16. len++;
    17. }
    18. fast = pHead;
    19. slow = pHead;
    20. for(int i = 0;i < len;i++)fast = fast->next;
    21. while(fast != slow){
    22. fast = fast->next;
    23. slow = slow->next;
    24. }
    25. return fast;
    26. }