给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。表为无头结点、单向。(由于涉及到结构体,所以写不了完整的测试代码,下面展示的代码为LeetCode中写的代码)

//第一次尝试:
//方法:图文解释:

//当然,这个方法有点不好想,我们还可以这样做:(这里就不演示了)

struct
ListNode* detectCycle(struct ListNode* head) { if(head == NULL){ return false; } struct ListNode* fast = head; struct ListNode* slow = head;
//快慢指针法,循环遍历找相遇点
while(fast&&fast->next){ fast = fast->next->next; slow = slow->next; if(slow == fast){ break; } }
//如果链表无环,那么就不会进入下面的循环中,而是指直接返回NULL
//有环就从头结点和相遇点开始遍历,直到二者相遇,返回交点
while(fast&&fast->next){ if(fast == head){ return fast; } fast = fast->next; head = head->next; } return NULL; }