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

news2024/11/24 14:54:28

在链表中,不光只有普通的单链表。之前写过的的一个约瑟夫环形链表是尾直接连向头的。这里的环形链表是从尾节点的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.coloradmin.cn/o/1649256.html

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

相关文章

面试笔记——多线程使用场景

线程池使用场景(CountDownLatch, Future) CountDownLatch CountDownLatch(闭锁/倒计时锁)用来进行线程同步协作,等待所有线程完成倒计时(一个或者多个线程,等待其他多个线程完成某件…

经典面试题之滑动窗口专题

class Solution { public:int minSubArrayLen(int target, vector<int>& nums) {// 长度最小的子数组 // 大于等于 targetint min_len INT32_MAX;// 总和int sum 0;int start 0; // 起点for(int i 0; i< nums.size(); i) {sum nums[i];while(sum > targe…

【如此简单!数据库入门系列】之效率基石 -- 磁盘空间管理

文章目录 1 前言2 磁盘空间管理3 磁盘空间管理的实现4 存储对象关系5 总结6 系列文章 1 前言 如何将表中的记录存储在物理磁盘上呢&#xff1f; 概念模式中&#xff0c;记录&#xff08;Record&#xff09;表示表中的一行数据&#xff0c;由多个列&#xff08;字段或者属性&…

mysql5.7数据库安装及性能测试

mysql5.7数据库安装及性能测试 记录Centos7.9下安装mysql 5.7并利用benchmark工具简单测试mysql的性能。 测试机&#xff1a;centos7.9 配置&#xff1a;4C8G40G 1. 下安装mysql5.7 安装mysql5.7&#xff1a; # 通过官方镜像源安装$ wget http://dev.mysql.com/get/mysql57-com…

如何用virtualbox 来跑openwrt 镜像?

1.下载好openwrt源代吗&#xff0c;编译之前先配置&#xff0c;让编译产生x86的virtualbox 镜像&#xff1a; 编译完成之后会产生vdi镜像文件&#xff0c; 在virtualbox 中创建一虚拟机&#xff0c;类型选择linux,版本other linux 64: 内存选择512&#xff1a; 这个地方把镜像…

【牛客】【模板】二维前缀和

原题链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 二维前缀和板题。 二维前缀和&#xff1a;pre[i][j]a[i][j]pre[i-1][j]pre[i][j-1]-pre[i-1][j-1]; 子矩阵 左上角为(x1,y1) 右下角(x2,y2…

使用openssl创建https证书

原文地址&#xff1a;使用openssl创建https证书-腾讯云开发者社区-腾讯云 从今天开始笔者打算和大家聊一聊http2这个协议&#xff0c;想要说清楚http2协议就必须亲手搭建一个http2的服务&#xff0c;并且对比http2和http1.1的特点&#xff0c;从而了解http2的一些新特性。 ht…

ESP32 IDF linux下开发环境搭建

文章目录 介绍升级Python环境下载Python包配置编译环境及安装Python设置环境变量 ESPIDF环境搭建下载esp-idf 代码编译等待下载烧录成功查看串口打印 介绍 esp32 官方文档给的不是特别详细 参考多方资料 最后才完成开发 主要问题在于github下载的很慢本教程适用于ubuntu deban…

华为eNSP中型企业局域网网络规划设计(下)

→b站传送门&#xff0c;感谢大佬← →华为eNSP中型企业局域网网络规划设计&#xff08;上&#xff09;← →拓扑图传送门&#xff0c;可以自己配置着玩← 配置ospf AR3 [AR3]ospf 1 router-id 3.3.3.3 //出口默认路由 [AR3-ospf-1]default-route-advertise always #area…

2024上半年软考新规,对高级论文科目不太友好

辽宁省发布了《关于2024年上半年计算机技术与软件专业技术资格(水平)考试批次安排的通知》&#xff0c;通知原文如下&#xff1a; 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 1.…

C 语言文件输入/输出(I/O)函数大全

C 语言文件输入/输出&#xff08;I/O&#xff09;函数大全 1. fopen() 函数2. fclose() 函数3. fread() 函数4. fwrite() 函数5. fseek() 函数6. ftell() 函数7. rewind() 函数8. feof() 函数9. ferror() 函数10. clearerr() 函数 &#x1f60a; C 语言文件输入/输出&#xf…

SparkSQL与Hive整合 、SparkSQL函数操作

SparkSQL与Hive整合 SparkSQL和Hive的整合&#xff0c;是一种比较常见的关联处理方式&#xff0c;SparkSQL加载Hive中的数据进行业务处理&#xff0c;同时将计算结果落地回Hive中。 整合需要注意的地方 1)需要引入hive的hive-site.xml&#xff0c;添加classpath目录下面即可…

国家信息安全水平等级考试NISP一级题目(包含答案)

国家信息安全水平等级考试NISP一级题目 有任何想要咨询NISP都可以私信博主 1&#xff0e; 下列关于用户口令说法错误的是&#xff08; &#xff09;。 A.口令不能设置为空 B.口令长度越长&#xff0c;安全性越高 C.复杂口令安全性足够高&#xff0c;不需要定期修改 D.口令认证…

软件测试之 自动化测试 基于Python语言使用Selenium、ddt、unitTest 实现自动化测试

你好,我是Qiuner. 为记录自己编程学习过程和帮助别人少走弯路而写博客 这是我的 github gitee 如果本篇文章帮到了你 不妨点个赞吧~ 我会很高兴的 &#x1f604; (^ ~ ^) 想看更多 那就点个关注吧 我会尽力带来有趣的内容 本文档是一年前学后记得笔记 现在居然还记得很清楚 基于…

ASV1000视频监控平台:接入支持JT808标准的设备

目录 一、JT/T 808标准简介 &#xff08;一&#xff09;概述 &#xff08;二&#xff09;标准内容简介 1、消息分类 2、位置信息 3、报警信息 4、车辆控制 5、数据转发 二、在ASV1000上通过JT808添加设备 &#xff08;一&#xff09;登录视频监控平台管理端 &#x…

深度学习之基于Vgg16卷积神经网络乳腺癌诊断系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 基于VGG16卷积神经网络的乳腺癌诊断系统项目是一个结合深度学习技术和医学图像处理的创新项目&#xff0c;旨在提高…

嵌入式全栈开发学习笔记---C语言笔试复习大全14

目录 指针初级 指针的概念 指针类型 指针类型长度 指针的定义 通过指针访问数据 p1和*p1的区别 指针做函数参数 上一篇复习了8道编程题&#xff0c;这篇开始正式复习之指针&#xff01; 说明&#xff1a;我们学过单片机的一般都是有C语言基础的了&#xff0c;网上关于C…

Sarcasm detection论文解析 |用于微博讽刺检测的上下文增强卷积神经网络

论文地址 论文地址&#xff1a;Context-augmented convolutional neural networks for twitter sarcasm detection - ScienceDirect 论文首页 笔记大纲 用于微博讽刺检测的上下文增强卷积神经网络 &#x1f4c5;出版年份:2018 &#x1f4d6;出版期刊:Neurocomputing &#x1f…

Golang | Leetcode Golang题解之第71题简化路径

题目&#xff1a; 题解&#xff1a; func simplifyPath(path string) string {stack : []string{}for _, name : range strings.Split(path, "/") {if name ".." {if len(stack) > 0 {stack stack[:len(stack)-1]}} else if name ! "" &am…

以中国为目标的DinodasRAT Linux后门攻击场景复现

概述 在上一篇《以中国为目标的DinodasRAT Linux后门剖析及通信解密尝试》文章中&#xff0c;笔者对DinodasRAT Linux后门的功能及通信数据包进行了简单剖析&#xff0c;实现了对DinodasRAT Linux后门心跳数据包的解密尝试。 虽然目前可对DinodasRAT Linux后门的通信数据包进…