题目链接:https://leetcode-cn.com/problems/linked-list-cycle-lcci/
给定一个有环链表,实现一个算法返回环路的开头节点。
有环链表的定义:在链表中某个节点的next元素指向在它前面出现过的节点,则表明该链表存在环路。
示例 1:
输入:head = [3,2,0,-4], pos = 1
输出:tail connects to node index 1
解释:链表中有一个环,其尾部连接到第二个节点。
示例 2:
输入:head = [1,2], pos = 0
输出:tail connects to node index 0
解释:链表中有一个环,其尾部连接到第一个节点。
示例 3:
输入:head = [1], pos = -1
输出:no cycle
解释:链表中没有环。
1 struct ListNode *detectCycle(struct ListNode *head) {
2 struct ListNode *fast=head,*slow=head;
3 while(fast&&fast->next){
4 slow=slow->next;
5 fast=fast->next->next;
6 if(fast==slow) break;
7 }
8 if (fast==NULL||fast->next==NULL) return NULL;
9 slow=head;
10 while(slow!=fast){
11 slow=slow->next;
12 fast=fast->next;
13 }
14 return fast;
15 }
来源:https://www.cnblogs.com/shixinzei/p/12432737.html