### 思路:先[判断是否有环](https://www.kancloud.cn/persuez/algorithm/858057),无环返回 nullptr,有环则有以下方法:记相遇点为pos,然后同时从链头和pos点出发,它们的相遇点即为环的入口点。证明如下:设从链头到环入口点(连接点)的步数为 x(包括两个端点x + 1个节点),连接点到相遇点的步数为 y,慢指针走了 s 步,那么s = x + y,快指针走了2s = x + n * t + y(n 为走环的圈数,t 为环中步数(从连接点出发回到连接点),得到 x + y = nt,所以同时从链头和pos点出发,它们的相遇点即为环的入口点。实现代码如下: ``` // meetingNode函数在之前的对应章节有,思路中有链接可以跳转过去 SList* findEntryForLoop(SList *list) { if (list == nullptr) { return nullptr; } SList *meetingNode = meetingNode(list); if (meetingNode == nullptr) { return nullptr; } // 循环直至相遇,通过以上证明,循环一定会结束 while (list != meetingNode) { list = list->m_next; meetingNode = meetingNode->m_next; } return list; } ```