leetcode.环形链表问题

news2025/3/2 2:09:40

目录

题目1

示例

解题思路

代码实现

补充

题目2

示例

解题思路

代码实现


题目1

66360b0d1ac6496e9f4195ae0fb6a0e0.jpg

该题链接:https://leetcode.cn/problems/linked-list-cycle/description/

示例

ff1e1d3a4c744212b2a3814f99f6165f.png

cd707a3f7848435781f3138a894e2e3c.png

解题思路

     要创建两个指针一个是快指针(fast),另一个慢指针(slow)。快指针走两步慢指针走一步,让它们一起往后走,如果它们相等即存在环。

     为什么它们相等即存在环呢?

     我们先假设一个链表存在环。让fast和slow一起从起始位置走。fast肯定先进环。当slow走到环的入口处时,假设fast与slow的距离为N。fast走两步,slow走一步,这时N会变成N-1。只要它们一直走,N一定会等于零,这时候它们相遇,即存在环。

代码实现

     这里着重讲一下循环结束条件。

  • 如果没有环,因为fast走的快所以它会先遇到NULL。要另外加上fast->next这是为了防止对NULL进行解应用。
  • 如果有环直接返回即可。
typedef struct ListNode ListNode;
bool hasCycle(struct ListNode *head) {
    ListNode* slow = head,*fast = head;
    while(fast && fast->next)
    {
        slow = slow->next;
        fast = fast->next->next;
        if(slow == fast)
            return true;
    }
    return false;
}

补充

     为什么快指针要走两步走三步不行吗?四步呢?n步呢?这里我介绍fast走三步的情况。

     假设环的总长度为C。根据上面我介绍的如果N为奇数第一轮它们不会相遇。第二轮它们的距离是C-1,如果C-1是奇数那它们就永远就遇不到了。

总结一下:

     1、N是偶数,第一轮就追上了

     2、N是奇数,第一轮追击会错过,距离变成C-1

          a、如果C-1是偶数,下一轮就追上了

          b、如果C-1是奇数 那么就永远追不上 

     同时存在N是奇数且C是偶数,那就永远追不上

     让我们来证一下

     假设现在slow现在在入环口。设slow走的距离为L ,fast走的距离为L+X*C+C-N(X是fast在环里转的圈数)。

6f3f80a72536484e86433e6cd0db284f.png

     因为3slow=fast。所以3L=L+X*C+C-N。化简得2L=(X+1)C-N。

     分析:2L为偶数,将上面的不存在条件带入会发现该等式并不成立,所以走三步会遇到。

题目2

该题链接:https://leetcode.cn/problems/linked-list-cycle-ii/description/ 

示例

解题思路

     先设个快慢指针如果存在环则它们一定会相遇,当它们相遇时设一个meet指针指向它们相遇位置,在设一个head指针指向链表头节点。让它们同时走每次走一步,当它们相等时即找到入环的节点。

     解释:假设从头结点到入环节点距离为L,入环节点到fast和slow的相遇点距离为N。

      fast走的距离L+X*C+N(X是圈数),slow走的距离L+N。因为2slow=fast得

      2(L+N)=L+X*C+N,化简得:L=(X-1)C+C-N。即L=C-N。

代码实现

typedef struct ListNode ListNode;
struct ListNode *detectCycle(struct ListNode *head) {
    ListNode* slow = head, *fast = head;
    while(fast && fast->next)
    {
        slow = slow->next;
        fast = fast->next->next;
        if(slow == fast)
        {
            ListNode* meet = slow;
            while(meet != head)
            {
                meet = meet->next;
                head = head->next;
            }
            return meet;
        }
    }
    return NULL;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1673593.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JSP相关题目练习

一、前置知识 【eclipse/IDEA】如何在IDE里创建一个Java Web项目? 1. 实现Bean类的User实例 以一个实现Bean类User的实例。在Eclipse里调用Tomcat服务器运行。 Javabean是一种Java类, 通过封装属性和方法成为具有某种功能或者处理某个业务的对象&…

MyBatis-Plus核心功能详解:条件构造器、自定义SQL与Service接口

在Java的Web开发中,MyBatis-Plus作为MyBatis的增强工具,提供了许多实用的功能,极大地简化了数据库操作的开发过程。下面,我们将详细探讨MyBatis-Plus的三大核心功能:条件构造器、自定义SQL以及Service接口。 一、条件…

用掼蛋的智慧优化图形化编程体验

周末的午后,阳光透过卧龙家庭院的树叶,在地上洒下一片斑驳的光影。微风轻拂,树叶沙沙作响,为这个宁静的庭院增添了一丝生机。 在庭院的一角,有一张专门用于掼蛋的桌子。桌子周围摆放着几把舒适的椅子,此时&…

Human Serum Albumin ELISA kit(人血清白蛋白HSA)

人血清白蛋白(Human Serum Albumin, HSA)是人体血液中的血清白蛋白。它约占血清蛋白的一半,由肝脏产生。白蛋白具有运输荷尔蒙、脂肪酸和其他化合物、缓冲pH值和维持血管压力等功能。人血清白蛋白是一种高水溶性球状单体血浆蛋白,…

[AWS] stepfunctions-local

本质是本地docker,只支持异步调用 run aws-stepfunctions-localdocker run -p 8083:8083 \ --mount type=bind,readonly,source=/path/MockConfigFile.json,destination=/home/StepFunctionsLocal/MockConfigFile.json \ -e SFN_MOCK_CONFIG="/home/StepFunctionsLocal/…

ranger 队列划分和权限管控方法

创建用户 创建用户ngk【KDE首页->租户管理->集群用户->添加用户】: 创建用户组ngk_group并绑定 ngk用户【KDE首页->租户管理->集群用户->添加用户组】: 创建角色,并绑定用户组 ngk_group 【KDE首页->租户管理->集群用户->添加角色】: 创建队列…

备忘录怎么改字体样式、字号和颜色?

在日常的工作和生活中,备忘录扮演着举足轻重的角色。每当灵感闪现,或是工作事项需要记录,我总是习惯性地打开我的备忘录,将这些宝贵的想法和任务一一记下 然而,随着使用频率的增加,我发现自己越来越渴望能…

PHP笔记

1. 搭建运行环境 1.1 挂载光盘 [rootredhat200 ~]# mount /dev/sr0 /mnt 1.2 配置仓库 # 查看仓库列表 [rootredhat200 ~]# dnf repolist# 进入到仓库目录 [rootredhat200 ~]# cd /etc/yum.repos.d/ # 编辑仓库文件 [rootredhat200 yum.repos.d]# vim base.repo # 查看仓库…

【antd + vue】Failed to resolve component: a-select-option

一、问题说明 1、出现情况&#xff1a; <a-select>嵌套<a-select-option>&#xff0c;其中<a-select-option>循环&#xff0c;能正常使用&#xff0c;但是控制台警告。 2、控制台警告&#xff1a; [Vue warn]: Failed to resolve component: a-select-op…

【电商API接口】网上商城接口/电商数据接口详情

比价接口背景&#xff1a;电商运营中&#xff0c;数据分析这项工作越来越重要&#xff0c;许多品牌方也越来越热衷去做电商数据分析。不过&#xff0c;全面的数据该如何获取呢&#xff0c;此时&#xff0c;电商数据接口的重要性便凸显出来了。 数据接口主要有以下特点&#xf…

GPT4o速测:约0.5秒延迟的多模态能力

文章目录 1. 测评2. IntroReference 没有剪辑&#xff0c;约0.5秒延迟的多模态能力。 1. 测评 推理速度异常快&#xff0c;比之前快了大概两三倍&#xff0c;对产品端来说是个很好的事情&#xff0c;想用gpt4级别性能终于可以少讨论几句时延影响用户体验了模型指令遵从能力变强…

哔哩哔哩直播通用榜单系统

榜单系统的定位和业务价值 榜单遍布B站直播相关业务的各个角落&#xff0c;直播打赏、直播间互动、付费玩法、互动玩法、活动、主播PK、语聊房、人气主播排名、高价值用户排名、增值集卡、up主充电等等&#xff0c;在这众多的业务场景中&#xff0c;我们能看到各种各样的榜单。…

idea 灵异事件之maven 缓存

方法一 mvn clean install 方法二 强制刷新maven 1 idea 右侧的maven 窗口&#xff1a; 方法三 强制刷新maven 2 右键项目&#xff1a; 上面虽然是重新导入Maven依赖&#xff0c;按理说&#xff0c;IDEA应该根据当前最新的pom.xml来导入依赖&#xff1b; Reload project操作…

Leetcode—2244. 完成所有任务需要的最少轮数【中等】

2024每日刷题&#xff08;136&#xff09; Leetcode—2244. 完成所有任务需要的最少轮数 实现代码 class Solution { public:int minimumRounds(vector<int>& tasks) {unordered_map<int, int> map;for(int task: tasks) {map[task];}int ans 0;// freq 1 …

青否数字人的应用场景有哪些?

数字人作为一种新兴技术&#xff0c;应用场景也非常广泛&#xff1a; 1. 企业宣传和营销&#xff1a;企业可以使用数字人制作形象宣传片或广告视频&#xff0c;吸引更多的客户和用户。 2. 教育培训&#xff1a;数字人可以在教育培训领域得到广泛应用&#xff0c;例如制作交互式…

idea配置MySQL提示

点击sql语句&#xff0c;然后再选择show context actions 然后再选择Inject language or reference 然后再选择MySQL 然后我们会发现sql语句变颜色了 如果表是红色 那么需要我们连接mysql的对于的数据库

2024淘宝天猫618凑单跨店满300减多少及618红包领取口令是什么?

2024年天猫618购物狂欢节全攻略 随着夏日的脚步临近&#xff0c;一年一度的天猫618年中大促也即将拉开帷幕。作为年中最大的购物狂欢节&#xff0c;天猫618不仅汇聚了众多优质商品&#xff0c;还准备了丰富的优惠活动和红包福利&#xff0c;让消费者在享受购物乐趣的同时&…

CSS 块状元素

还是大剑师兰特&#xff1a;曾是美国某知名大学计算机专业研究生&#xff0c;现为航空航海领域高级前端工程师&#xff1b;CSDN知名博主&#xff0c;GIS领域优质创作者&#xff0c;深耕openlayers、leaflet、mapbox、cesium&#xff0c;canvas&#xff0c;webgl&#xff0c;ech…

振弦式应变计的与实际测量值不一致怎么办

在进行结构健康监测或其他工程测量时&#xff0c;精确性和可靠性至关重要。振弦式表面应变计是一种广泛使用的测量工具&#xff0c;它通过测量材料表面的应变来评估结构的应力状态。然而&#xff0c;在实际应用中&#xff0c;振弦式应变计的测量值与实际应变值之间的不一致问题…

F5G-A万兆光网商用启航,挥动FTTR F50星光之翼,北京联通助力首都家庭飞向全光智慧时代...

2001年&#xff0c;王菲在发行的新歌《光之翼》中唱道&#xff1a;静静地按下电源开关/屏幕的色彩越来越亮/在虚拟的城市/找一个让心灵休息的地方/张开透明翅膀/朝着月亮飞翔/搜寻最美一个现世的天堂…… 将时间拨回千禧年&#xff0c;“看不见的城市”“伊托邦”“网络之城”&…