问题描述
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。
说明:不允许修改给定的链表。
进阶:
你是否可以不用额外空间解决此题?
主要不能使用额外空间较为困难,先判断环,之后找到相遇点,将其中一个指针指向头结点,两指针同时走,相遇即为环入口。
推导过程为 :设开头到相遇点的距离为a,开头到入口的距离为b,相遇点到入口的向右距离为c,则有公式 a+c+a-b=2a 快指针走的距离为慢指针的两倍。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode *detectCycle(struct ListNode *head) {
struct ListNode * t;
struct ListNode * t2;
t=head;
t2=head;
while(t2!=NULL){
if(t2->