zoukankan      html  css  js  c++  java
  • 环形链表 II

    给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。

    为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。

    说明:不允许修改给定的链表。

    示例 1:

    输入:head = [3,2,0,-4], pos = 1
    输出:tail connects to node index 1
    解释:链表中有一个环,其尾部连接到第二个节点。

    示例 2:

    输入:head = [1,2], pos = 0
    输出:tail connects to node index 0
    解释:链表中有一个环,其尾部连接到第一个节点。

    示例 3:

    输入:head = [1], pos = -1
    输出:no cycle
    解释:链表中没有环。

    进阶:
    你是否可以不用额外空间解决此题?

    1. 相遇时快指针走的路程为F;慢指针走的路程为S;F=2*S;
    2. F=L+X+N*R;(N为圈数,R为环的周长)
    3. S=L+X;
    4. L=N*R-X;当N==1时,L=R-X;所以表头到入口的长度等于相遇点到入口的长度。
    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        ListNode *detectCycle(ListNode *head) {
            if(!head)
                return nullptr;
    
            auto slow=head;
            auto fast=head;
            while(true)
            {
                if(!fast||!fast->next)
                    return nullptr;
                
                fast=fast->next->next;
                slow=slow->next;
                if(slow==fast)
                    break;
            }
    
            fast=head;
            while(fast!=slow)
            {
                fast=fast->next;
                slow=slow->next;
            }
            return slow;
        }
    };
  • 相关阅读:
    Lesson 43-44 Vacation Season is Approaching?
    Lesson 41-42 How would you respond?
    Lesson 37-38 Do you want to be a millionaire?
    Lesson 35-36 What did you forget?
    Lesson 33-34 Dieting
    保送
    陈老师搬书
    水题(原 USACO Mother's Milk)
    最大公约数和最小公倍数问题(luogu 1029)
    最大子矩阵(OJ 1768)
  • 原文地址:https://www.cnblogs.com/tianzeng/p/11910560.html
Copyright © 2011-2022 走看看