• 刷题力扣面试题 02.08. 环路检测


    题目链接

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/linked-list-cycle-lcci
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    题目描述

    给定一个链表,如果它是有环链表,实现一个算法返回环路的开头节点。若环不存在,请返回 null。

    如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。

    示例 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. 根据题目描述,判断链表是否有环,并返回进入环的第一个节点
    2. 使用快慢指针,快指针走两步,慢指针走一步,最终快慢指针会在环内相遇
    3. 快指针走过a+n(b+c)+b,慢指针走过a+b,同时快指针等于慢指针的2倍,a+n(b+c)+b=2(a+b)
    4. a=c+(n-1)(b+c),可知a等于c加上n-1圈环长,当有两个指针同时在链表头和快慢指针交点开始走,最终会在环的入口相遇

      引用官方题解方法二快慢指针

    代码

    /**
     * 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) {
            ListNode* faster = head;
            ListNode* slower = head;
            while (faster && faster->next) {
                slower = slower->next;
                faster = faster->next->next;
                if (slower == faster) {
                    faster = head;
                    while (faster != slower) {
                        faster = faster->next;
                        slower = slower->next;
                    }
                    return slower;
                }
            }
            return nullptr;
        }
    };
    
  • 相关阅读:
    Oracle Instance
    第03章-VTK系统概述(1)
    二叉查找树BST----java实现
    [Golang] 从零開始写Socket Server(2): 自己定义通讯协议
    linux之SQL语句简明教程---LIKE
    spring mvc 入门示例
    MyBatis与Spring集成
    MyBatis 一对一关联查询
    MyBatis CRUD Java POJO操作
    eclipse xml自动提示
  • 原文地址:https://www.cnblogs.com/HanYG/p/15832561.html
Copyright © 2020-2023  润新知