Leecode之环形链表进阶

一.题目及剖析

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

这道题就是找到链表中环的入口

二.思路引入

假设起点到环的入口的距离为L, 环的长度为C, 入口到相遇点的距离为C - N

设定一个快慢指针,速度分别为2, 1

则有 (L + kC - N) = 2*(L + C - N)

即L = (k - 1)C + N

说明,如果我设定两个速度相同的指针,一个从起点开始遍历,一个从相遇点开始遍历,那么它们会在入口处碰撞

三.代码引入

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode *detectCycle(struct ListNode *head) {
    if(head == NULL || head->next == NULL)
    return NULL;
    struct ListNode* fast, * slow;
    slow = fast = head;
    while(fast && fast->next)
    {
        slow = slow->next;
        fast = fast->next->next;
        if(slow == fast)
        {
            struct ListNode* meet = fast;
            while(meet != head)
            {
                meet = meet->next;
                head = head->next;
            }
            return meet;
        }
    }
    return NULL;
}

四.思路扩展

这道题如果将这个带还链表从相遇点断开,那么其实就是一个相交链表,交点就是环的入口

相关推荐

  1. leetcode-环形

    2024-02-10 13:50:03       63 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-10 13:50:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-10 13:50:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-10 13:50:03       82 阅读
  4. Python语言-面向对象

    2024-02-10 13:50:03       91 阅读

热门阅读

  1. ubuntu如何离线安装nginx?

    2024-02-10 13:50:03       51 阅读
  2. SIMD学习笔记1

    2024-02-10 13:50:03       39 阅读
  3. Python编程:17个提升工作效率的自动化脚本

    2024-02-10 13:50:03       41 阅读
  4. MATLAB实现随机森林回归算法

    2024-02-10 13:50:03       53 阅读
  5. 力扣-137. 只出现一次的数字 II

    2024-02-10 13:50:03       56 阅读
  6. C#win form解决导入CSV文件数据缺失问题

    2024-02-10 13:50:03       49 阅读