当前位置: 首页 > news >正文

LeetCode142环形链表

在这里插入图片描述
思路:
快慢指针,fast步长为2,low步长为1,快慢指针相遇则有环,快指针至少绕环一圈才会赶上慢指针,会在环内相遇,然后就是考虑怎么找环的入口
首先,head—a---->环入口----b—>相遇点—c---->环入口
快指针的速度是慢指针的两倍,那么同时间段走过的路程,快指针是慢指针两倍
low:a+b
fast:a+b+n(b+c)
得出等式:2(a+b)=a+b+n(b+c)
整理一下:a=(n-1)(b+c)+c
a:从head------>环入口的距离
b+c:一圈环的距离
c:从相遇点到环入口的距离,这个等式就是说,相遇后,一个指针从head走,一个指针从相遇点同时同步长开始走,会在绕n圈+从相遇点到入口的距离相遇,此时相遇会在环入口,也就是第一次相遇就在环入口

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode *detectCycle(struct ListNode *head)
{
    //1.定义快慢指针
    struct ListNode*low;
    struct ListNode*fast;
    low=head;
    fast=head;
    while(fast!=NULL&&fast->next!=NULL)//fast必须有两个节点才能执行fast->next->next不然会出现空指针访问,造成异常
    {
        //low步长为1,fast步长为2
        low=low->next;
        fast=fast->next->next;
        if(low==fast)//相遇,找入口
        {
            low=head;
            while(low!=fast)
            {
                low=low->next;
                fast=fast->next;
            }
            return low;//返回环的入口
        }
    }
    //循环完链表,low和fast未相遇,无环,返回NULL
    return NULL;
}

相关文章:

  • 代码随想录算法训练营第五十六天 | 108.冗余连接 109.冗余连接II
  • 代码随想录算法训练营第四十一天|买卖股票专题:121. 买卖股票的最佳时机、122.买卖股票的最佳时机II、123.买卖股票的最佳时机III
  • 质检LIMS系统在食品生产加工企业的应用 如何保证食品生产企业的安全
  • Unity2022发布Webgl2微信小游戏部分真机黑屏
  • pytorch小记(十五):pytorch中 交叉熵损失详解:为什么logits比targets多一个维度?
  • 13 python 数据容器-元组
  • GitLab 部署说明
  • 数据抓取的缓存策略:减少重复请求与资源消耗
  • vue2相关 基础命令
  • Vue 3 组件高级语法
  • Redis通用命令+部分策略模型
  • Mybatis基于注解开发
  • Ubuntu22.04 UEFI系统配置Apache Tomcat/8.5.87为开机自动启动
  • LangChain4J开源开发框架简介
  • 为什么有了Redis还需要本地缓存?
  • leetcode 2711. 对角线上不同值的数量差 中等
  • Redis原理:为什么要rehash
  • 详细分析HttpClient的基本知识(附Demo实战思路)
  • SEV内存加密位linux内核设置过程
  • C++锁: 读锁,递归锁,超时锁
  • 涿州做网站建设/seo免费优化软件
  • 网站建设服务合同书/软文营销文章300字
  • 杭州设计企业网站高端公司/兰州搜索引擎优化