思路:主要考察两个知识点:
1. 判断链表是否有环。
2. 如果有环,如何找到这个环的入口。
这道题和上道链表相交题目中的 “浪漫相遇”解法很相似,这种类型的 “快慢指针”要掌握,而且一定要动手画一画,这样灵感才会来。下面直接给出随想录的方法(我自己没想出来呜呜~)。
class Solution {
public:
ListNode *detectCycle(ListNode *head) {
ListNode* fast = head; // 快指针
ListNode* slow = head; // 慢指针
while(fast != NULL && fast->next != NULL){
fast = fast->next->next; // 走两步
slow = slow->next; // 走一步
if(fast == slow){
ListNode* cur1 = head; // cur1 指向头结点
ListNode* cur2 = fast; // cur2 指向“相交结点”
while(cur1 != cur2){
cur1 = cur1->next;
cur2 = cur2->next;
}
return cur1;
}
}
return NULL;
}
};