LeetCode刷题笔记-142.环形链表II
双指针+数学路程公式 C代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode *detectCycle(struct ListNode *head) {
struct ListNode *fast = NULL;
struct ListNode *slow = NULL;
struct ListNode *meet = NULL;
fast = head;
slow = head;
while(1) {
if (fast == NULL || slow == NULL) {
return NULL;
}
if (fast->next == NULL)
return NULL;
fast = fast->next->next; //注意1:先遍历再比较
slow = slow->next; //注意1:先遍历再比较
if (fast == slow) {
meet = slow;
slow = head;
while (1) {
if (slow == meet) { //注意点2: 相遇点到起始点的距离与head头结点到起始点的距离相等
return slow;
}
slow = slow->next;
meet = meet->next;
}
}
}
}