题目链接:
题目:
思路:用快慢指针,快指针一次走两个节点,慢指针一次走一个节点,当快指针为空或者快指针的下一个节点为空,那么说明这个链表不是环形链表,是环形链表则两个指针必回在环中相遇。
那么如何求环的第一个结点呢?
先直接说结论:一个指针从相遇点开始走,另一个指针从链表头开始走,它们会在环的入口相遇。
代码实现:
struct ListNode *detectCycle(struct ListNode *head) {
struct ListNode* slow = head,*fast = head;
while(fast && fast->next)
{
slow = slow->next;
fast = fast->next->next;
if(slow == fast)
{
//相遇
struct ListNode* meet = slow;
while(meet != head)
{
meet = meet->next;
head = head->next;
}
return meet;
}
}
return NULL;
}