Leetcode142环形链表II

Leetcode142环形链表II

tags: 链表

题目描述

https://leetcode-cn.com/problems/linked-list-cycle-ii/

思路1

使用一个指针发现暂时没有办法。因为改不了他的默认struct Listnode

使用常用的快慢指针还是比较容易的, 快慢指针一般来说就算一个1 step 一个2 step如果有环则迟早会相遇。

相遇原理(考虑有环)

无论怎么走 只要当时间T 2T(快指针步数)-T(慢指针步数) = N(环的长度=节点-1)

开始那段进入环的路程相等 抵消了

起点计算

这个我暂时不太好解释。 留存

具体参考东哥的算法抄

https://labuladong.gitee.io/algo/2/17/16/

🥬代码如下

class Solution {
public:
    ListNode *detectCycle(ListNode *head) {
        ListNode *slow = head;
        ListNode *fast = head;
        while( fast!=nullptr&&fast->next != nullptr )
        {
            fast = fast->next->next;
            slow = slow->next;
            if(fast==slow) break;
            //找到相遇点
        }

        if(fast==nullptr||fast->next==nullptr)
        {
            return NULL;
        }        

        slow = head;
        while(slow!=fast)
        {
            fast = fast->next;
            slow = slow->next;
            
        }
        return fast;
        
    }
};
posted @ 2021-12-02 10:11  LeoSharh  阅读(20)  评论(0编辑  收藏  举报