环形链表理解||QJ141.环形链表

在链表中,不光只有普通的单链表。之前写过的的一个约瑟夫环形链表是尾直接连向头的。这里的环形链表是从尾节点的next指针连向这链表的任意位置。
在这里插入图片描述
那么给定一个链表,判断这个链表是否带环。qj题141.环形链表就是一个这样的题目。
在这里插入图片描述
这里的思路是用快慢指针,慢指针一次走一步快指针一次走两步。两个指针都从起始位置出发,带环就一定会相遇,否则快指针率先走到链表的末尾。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
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;
}

那么这里有两个问题。
1、为什么快指针走两步,慢指针走一步就一定会相遇。
2、快指针一次走3步、4步…n步可以吗?

1、为什么快指针走两步,慢指针走一步就一定会相遇在这里插入图片描述
又可能在慢指针刚入环时就和快指针相遇了。慢指针叫slow,快指针叫fast,假设slow进环时,fast与slow的距离为N时,这里fast走两个slow走一个。
N-2+1 N-1
N-4+2 N-2
N-6+3 N-3
也就是说每追及一次,距离就缩小1,当距离为0时就追上了。

2、快指针一次走3步、4步…n步可以吗?
在这里插入图片描述
假设slow进环时,fast与slow的距离时N。fast走3个slow走1个。
N
N-2
N-4
这里要思考一下,如果N为偶数或奇数是否有不同?
当N为偶数时,假设N为4,4-2为2 4-4为0这时就追上了。
当N为奇数时,假设N为5,3 1 -1这时就错过了,进行新一轮的追击。
这时候fast和slow的距离就变成了c-1,c为环的长度。
当c-1为偶数的时候,下一轮就追不上。
当c-1为奇数时下一轮就追的上。
c-1为偶数时之所以能追上,是因为当fast和slow都走起来时相对位移是2,所以为偶数时下一轮就追上了。
这里总结一下:
N时偶数,第一轮就追上了。
N时奇数,第一轮就会错过,距离变成c-1。
如果c-1为偶数的时候,下一轮就追上了。
如果c-1为奇数的时候,永远也追不上。
同时存在N为奇数且C时偶数,那么就永远追不上。

真的永远追不上吗?
在这里插入图片描述
假设从初始位置到进入环的距离为L,fast与slow的距离为N。环的长度为N。
slow走的距离为:L
fast走的距离为:L+nC+C-N
不确定fast是否只走不到一圈,也可能走了好几圈所以用n
C。

fast走的距离是slow的三倍
3L=L+xC+C-N
2*L=(x+1)*C-N

当2L为偶数的时候,(x+1)偶数C-偶数N时,2L才为偶数。
当2
L为奇数的时候,(x+1)奇数C-奇数N时,2L才为奇数。
N是奇数时,C也是奇数
N是偶数时,C也是偶数
反证出,N为奇数且C为偶数不能同时存在,永远追不上的条件不成立。所以上面的结论不成立。

正确结论:
一定能追上。
N为偶数第一轮就追上了。
N为奇数第一轮追不上,第二轮C-1为偶数时就追上了

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python修改exe之类的游戏文件中的数值

文章目录 场景查找修改 补充字节to_bytes 场景 某些游戏数值(攻击力、射程、速度…)被写在exe之类的文件里 要先查找游戏数值,然后修改 查找 首先,要查找数值,大数重复较少,建议从大数找起 F 游戏原件…

SpringBoot 实现 RAS+AES 自动接口解密

接口安全老生常谈了 目前常用的加密方式就对称性加密和非对称性加密,加密解密的操作的肯定是大家知道的,最重要的使用什么加密解密方式,制定什么样的加密策略;考虑到我技术水平和接口的速度,采用的是RAS非对称加密和AE…

动态IP避坑指南:如何挑选合适的动态代理IP?

在如今的网络环境中,使用动态IP代理成为实现隐私保护、访问受限内容和提高网络效率的一种常见方式,选择合适的国外动态IP代理可以让我们的业务处理事半功倍。面对市面上琳琅满目的选择,如何挑选购买适合自己的动态IP代理服务呢?在…

【软件工程】测试

目录 前言软件测试的目标测试准则测试方法测试方案(重点)白盒测试(重点)逻辑覆盖测试语句覆盖判定覆盖(分支覆盖)条件覆盖判定/条件覆盖条件组合覆盖总结 基本路径覆盖法 黑盒测试等价类法边界值分析法 软件…

速卖通ip地址会相互影响吗?如何防止账号关联?

在跨境电商行业,大部分平台都是不允许一个卖家操作多个店铺的,如果被平台检测出账户关联,可能会被封店。在速卖通平台,会通过IP地址来判断是否经营多个账号吗?IP地址会使店铺相互影响吗? 一、速卖通IP地址会关联吗? 首先各位卖…

从零开始学习生成树实验:一步一步走向精通

大家好,这里是G-LAB IT实验室。 ⭕5月18日 CCNAHCIA 新开班来啦👏 现在报名有早鸟价,感兴趣的可咨询 👇👇👇 敲重点! 可小窗客服咨询课程价格 本课程包含线下面授、线上直播、录播、实验、考试习题、…

【数据库原理及应用】期末复习汇总高校期末真题试卷08

试卷 一、选择题(每题 2 分,共 30 分)    1. ___ ____是长期存储在计算机内的有组织,可共享的数据集合. A.数据库管理系统 B.数据库系统 C.数据库 D.文件组织 2. 数据库类型是按照 来划分…

Java医院绩效考核系统源码maven+Visual Studio Code一体化人力资源saas平台系统源码

Java医院绩效考核系统源码mavenVisual Studio Code一体化人力资源saas平台系统源码 医院绩效解决方案包括医院绩效管理(BSC)、综合奖金核算(RBRVS),涵盖从绩效方案的咨询与定制、数据采集、绩效考核及反馈、绩效奖金核…

1.基于python的单细胞数据预处理-归一化

目录 归一化的引入移位对数皮尔森近似残差两个归一化方法的总结 参考: [1] https://github.com/Starlitnightly/single_cell_tutorial [2] https://github.com/theislab/single-cell-best-practices 归一化的引入 在质量控制中,已经从数据集删除了低质…

力扣HOT100 - 739. 每日温度

解题思路&#xff1a; 单调栈 class Solution {public int[] dailyTemperatures(int[] temperatures) {int length temperatures.length;int[] ans new int[length];Deque<Integer> stack new LinkedList<>();for (int i 0; i < length; i) {int temperatu…

【NLP练习】使用seq2seq实现文本翻译

使用seq2seq实现文本翻译 &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 from __future__ import unicode_literals, print_function, division from io import open import unicodedata import string impo…

Star-CCM+分配零部件至区域2-根据零部件的特性分组分配零部件至区域

前言 前文已经讲解了将零部件分配至区域的方法。其中有一种方法是"将所有部件分配到一个区域"。在工程应用中&#xff0c;有时会把同一种类型的部件分配到一个区域&#xff0c;因此在一个项目中有可能需要多次进行"将所有部件分配到一个区域"。如在电机温…

分布式与一致性协议之MySQL XA协议

MySQL XA协议 概述 相信很多人都知道MySQL支持单机事务&#xff0c;那么在分布式系统中&#xff0c;涉及多个节点&#xff0c;MySQL又是怎样实现分布式事务的呢&#xff1f; 举个例子&#xff0c;一个业务系统需要接收来自外部的指令&#xff0c;然后访问多个内部其他系统来执…

OpenBayes 一周速览|Apple 开源大模型 OpenELM 上线;字节发布 COCONut 首个全景图像分割数据集,入选 CVPR2024

公共资源速递 This Weekly Snapshots &#xff01; 5 个数据集&#xff1a; * COCONut 大规模图像分割数据集 * THUCNews 新闻数据集 * DuConv 对话数据集 * 安徽电信知道问答数据集 * Sentiment Analysis 中文情感分析数据集 2 个模型&#xff1a; * OpenELM-3B-Inst…

三、配置带HybridCLR的ARCore开发环境

预告 本专栏将介绍如何使用这个支持热更的AR开发插件&#xff0c;快速地开发AR应用。 专栏&#xff1a; Unity开发AR系列 插件简介 通过热更技术实现动态地加载AR场景&#xff0c;简化了AR开发流程&#xff0c;让用户可更多地关注Unity场景内容的制作。 “EnvInstaller…”支…

【前端基础】CSS样式+Vue中绘制时间轴

深度选择器 在 Vue.js 中&#xff0c;/deep/、>>>、:deep 和 ::v-deep 这些都是深度选择器&#xff0c;用于修改子组件的样式。它们主要用于解决作用域样式和组件样式之间的冲突问题。 1. /deep/ 或 >>> /deep/ 和 >>> 是相同的选择器&#xff0c;…

rider自定义代码片段(以C#为例)

1.先看效果 2.在哪设置 File→Settings→Editor→Live Templates→C#3.咋定义 代码片段中的变量用$$包围&#xff0c;而且我们可以自定义变量名称&#xff0c;如CName。选择我们自定义的变量名称我们可以修改变量是否可以被修改以及变量将自动匹配的值。 比如将CName自动填充…

123. SQL优化技巧汇总

文章目录 1 避免使用select *2 用union all代替union3 小表驱动大表4 批量操作5 多用limit6 in中值太多7 增量查询8 高效的分页9 用连接查询代替子查询10 join的表不宜过多11 join时要注意12 控制索引的数量13 选择合理的字段类型14 提升group by的效率15 索引优化 sql优化是一…

07_Flutter使用NestedScrollView+TabBarView滚动位置共享问题修复

07_Flutter使用NestedScrollViewTabBarView滚动位置共享问题修复 一.案发现场 可以看到&#xff0c;上图中三个列表的滑动位置共享了&#xff0c;滑动其中一个列表&#xff0c;会影响到另外两个&#xff0c;这显然不符合要求&#xff0c;先来看下布局&#xff0c;再说明产生这个…

Nginx rewrite项目练习

Nginx rewrite练习 1、访问ip/xcz&#xff0c;返回400状态码&#xff0c;要求用rewrite匹配/xcz a、访问/xcz返回400 b、访问/hello时正常访问xcz.html页面server {listen 192.168.99.137:80;server_name 192.168.99.137;charset utf-8;root /var/www/html;location / {root …
最新文章