Linked List Cycle II问题及解法

来源:互联网 发布:mysql media1.cab 编辑:程序博客网 时间:2024/05/23 19:13

问题描述:

Given a linked list, return the node where the cycle begins. If there is no cycle, return null.

Note: Do not modify the linked list.

Follow up:
Can you solve it without using extra space?


问题分析:

使用双指针fast,slow,判断是否有环;若有环,则设置链表起点到环起点的距离为s,环起点到fast和slow相遇点的距离为m,环的周长为r。则可列出如下等式:s = r - m + nr(n >=0,指slow从环起点开始共走了n圈)。有了等式,求解就不成问题了。


过程详见代码:

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:    ListNode *detectCycle(ListNode *head) {        ListNode * fast = head, *slow = head;while (fast!= NULL && fast->next != NULL){fast = fast->next->next;slow = slow->next;if (slow == fast){while (slow != head){head = head->next;slow = slow->next;}return head;}}return NULL;    }};



原创粉丝点击