LeetCode - 142. 环形链表 II (C语言,快慢指针,配图)

LeetCode - 142. 环形链表 II (C语言,快慢指针,配图)_第1张图片

        如果你对快慢指针,环形链表有疑问,可以参考下面这篇文章,了解什么是环形链表后,再做这道题会非常简单,也更容易理解下面的图片公式等。

LeetCode - 141. 环形链表 (C语言,快慢指针,配图)-CSDN博客

        上述文章总结:如果一个链表是环形链表,采用快慢指针,快慢指针会在环中相遇,从而得到相遇点。

理论基础:

        当链表是环形链表的时候,一个指针从入口位置开始,一个指针从相遇点开始,他们相遇的那个点就是入口点。我们可以从下面这张图中了解。

LeetCode - 142. 环形链表 II (C语言,快慢指针,配图)_第2张图片

代码展示:

struct ListNode *detectCycle(struct ListNode *head) {
    struct ListNode* fast = head;
    struct ListNode* slow = head;
    while(fast && fast->next)
    {
        fast = fast->next->next;
        slow = slow->next;
        if(fast == slow)
        {
         struct ListNode* meet = fast;
         while(meet != head)
        {
            meet = meet->next;
            head=head->next;
        }
         return meet;   
        }
    }
    return NULL;
}

你可能感兴趣的:(LeetCode,刷题总结,leetcode,链表,c语言,数据结构,笔记,算法)