取链表的环入口
思路:
也是用双指针法,快指针每次两步,慢指针每次一步。这两个指针慢慢地走入一个环。如果快指针和慢指针相遇了,那么就说明有环。但此时有环还不够,还要去找到环的入口。此时我不理解了(2024年5月19日)。但是代码很简洁。
日后再回想。
代码:
ListNode* detectCycle(ListNode* head) {
ListNode* cur = head;
// 如果链表中没有节点,则没有环。
if (cur == NULL) {
return NULL;
}
// 遍历节点
ListNode* fast = head;
ListNode* slow = head;
while (fast != NULL && fast->next != NULL) {
fast = fast->next->next;
slow = slow->next;
if (fast == slow) {
ListNode* cur = head;
while (cur != slow) {
slow = slow->next;
cur = cur->next;
}
return cur;
}
}
return NULL;
}