快慢指针找环入口,时间O(N)
个人计算分析导图:
模板
class Solution {
public:
ListNode *entryNodeOfLoop(ListNode *head) {
//这一句不能省否则只有一个节点时会出错,或者在循环中判断f是否空吧
// if(!head || !head->next) return nullptr;
auto l = head, f = head;
while(f){
l = l->next, f = f->next;
if(f) f = f->next;
if(!f) return 0;//
if(f == l){
//走到这必然有环
l = head;
while(f != l) l = l->next, f = f->next;
return f;
}
}
return nullptr;
}
};