【数据结构】:链表的带环问题

🎁个人主页:我们的五年

🔍系列专栏:数据结构

🌷追光的人,终会万丈光芒

 

 前言:

链表的带环问题在链表中是一类比较难的问题,它对我们的思维有一个比较高的要求,但是这一类问题分析起来也是很有趣的,下面我就给大家讲一下链表的带环问题,并且带上几个例题进行分析。

喜欢的铁子们可以点点关注,感谢大家的支持。

🏝1.链表的分类:

●根据链表,单向,双向,带头,不带头,循环,不循环,可以把链表分成八种。虽然说有八种链表,但是常用的只有:不带头单向不循环链表,带头双向循环链表。

●但是今天我们要看的是不带头单向不循环,但是内部带环的问题。

🏝2.判断链表是否带环?

【LeetCode】第141题-链接:https://leetcode.cn/problems/linked-list-cycle/description/

 🏜问题描述:

 

 🏜实现代码:

/**

 * Definition for singly-linked list.

 * struct ListNode {

 *     int val;

 *     struct ListNode *next;

 * };

 */

 typedef struct ListNode ListNode;

bool hasCycle(struct ListNode *head) {

    ListNode* fast=head;

    ListNode* slow=head;

    while(fast&&fast->next)

    {

        fast=fast->next->next;

        slow=slow->next;

        if(fast==slow)

            return true;

    }

    return false;

}

🏜问题分析:

1.快慢指针都从头开始走,慢指针一次走一步,快指针一次走两步。

2.当fast进环的时候,slow还在环外。

3.当slow金环的时候,fast在环中的某个位置。也就是说,fast和slow差了N个位置,当fast和slow都进环的时候,就变成了追击问题。

4.slow每次走一步,fast每次走两步,也就是fast去追slow,把slow看成静止的,fast就一次往前面走一步,所以fast一定可以追上slow。

🏝3.如果fast一次走三步,slow一次走一步,一定可以追上吗?

这里先给出答案:一定可以追上!

当slow刚刚进环的时候,fast在环的某个位置,此时fast开始追击slow,还是把slow看成静止的,fast每次往相对于slow追击两步。

开始时,slow与fast相差N

1.当N为偶数时:

因为每次fast走三步,slow走一步。也就是N每次-2。因为N为偶数,所以是一定可以追上的。

2.当N为奇数,环的周长为C为奇数:

因为N每次都是-2,所以第一次追的时候fast和slow会错过,fast比slow快出了一步。

此时环的周长C为奇数,那么此时fast和slow相差为C-1为偶数,那么就回到第一种情况。

3.N为奇数,C为偶数,根据情况2,fast追完一圈,fast和slow相差的距离为奇数,所以fast和slow会一直错过,但是这种情况真的存在吗?

先来看看这个等式:

slow刚刚进环时:

slow走过的路程为:L

fast走过的路程为:L+k*C+C-N

因为fast的速度是slow的三倍,所以有3*L=L+k*C+C-N。

2*L=k*C+C-N

等式左边:偶数

等式右边:情况3时的情况是:C为偶数,N为奇数,k*C为偶数,C-N为奇数,所以等式右边为奇数

所以这种情况是不存在的!!!

代码分析:fast一次走三步,slow一次走一步

 typedef struct ListNode ListNode;

bool hasCycle(struct ListNode *head) {

    ListNode* fast=head;

    ListNode* slow=head;

    while(fast&&fast->next&&fast->next->next)

    {

        fast=fast->next->next->next;

        slow=slow->next;

        if(fast==slow)

            return true;

    }

    return false;

}

 typedef struct ListNode ListNode;
bool hasCycle(struct ListNode *head) {ListNode* fast=head;ListNode* slow=head;while(fast&&fast->next&&fast->next->next){fast=fast->next->next->next;slow=slow->next;if(fast==slow)return true;}return false;
}

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

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

相关文章

拌合楼管理系统(十六)c#如何实现点击同时启动两个窗体,并且窗体全部关闭后才退出程序

前言: 好长时间没有再写博文了,最近项目有个需求,无人值守程序需要一个client端,主要实现两个功能,一个是显示安装的四个监控的画面,一个是显示地磅称重数量和车牌列表等一些信息。今天主要解决如何显示两个…

SQL注入漏洞--报错/union/布尔盲注/时间盲注

之前介绍了数据库的基本操作,今天这篇文章就来实操SQL注入。 阅读本文前可以先看一下基本操作,有助于更换理解本文。。。 https://blog.csdn.net/weixin_60885144/article/details/138356410?spm1001.2014.3001.5502 what SQL---结构化查询语言---S…

【目标检测】DEtection TRansformer (DETR)

一、前言 论文: End-to-End Object Detection with Transformers 作者: Facebook AI 代码: DEtection TRansformer (DETR) 特点: 无proposal(R-CNN系列)、无anchor(YOLO系列)、无NM…

从一到无穷大 #25 DataFusion:可嵌入,可扩展的模块化工业级计算引擎实现

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 本作品 (李兆龙 博文, 由 李兆龙 创作),由 李兆龙 确认,转载请注明版权。 文章目录 引言架构总览与可扩展性Catalog and Data SourcesFront End逻辑计划与逻辑计划优化器…

美国零售媒体(广告业)指南:快速增长、不断扩展的业态和新兴机遇

Guide to retail media: Rapid growth, expanding formats, and emerging opportunities --- 零售媒体如何通过CTV和其他合作伙伴关系向上发展 原文作者:Sara Lebow | 2024年2月16日 整理编辑:数字化营销工兵 I 2024年5月2日 ​​​​​​​ &#…

Agent AI智能体:如何借助机器学习引领科技新潮流

文章目录 📑前言一、Agent AI智能体的基本概念二、Agent AI智能体的技术进步2.1 机器学习技术2.2 自适应技术2.3 分布式计算与云计算 三、Agent AI智能体的知识积累3.1 知识图谱3.2 迁移学习 四、Agent AI智能体的挑战与机遇4.1 挑战4.2 机遇 小结 📑前言…

python学习笔记B-15:序列结构之字典--字典的创建与删除

字典的创建与删除方法: import random #第1种创建方式 d {10:"cat", 20:"dog", 30:"monkey"} print(d) #第2种创建方式 lst1 [10,20,30] lst2["cat","dog","monkey"] d zip(lst1,lst2) print(dict…

DRF解析器源码分析

DRF解析器源码分析 1 解析器 解析请求者发来的数据(JSON) 使用 request.data 获取请求体中的数据。 这个 reqeust.data 的数据怎么来的呢?其实在drf内部是由解析器,根据请求者传入的数据格式 请求头来进行处理。 drf默认的解…

还在愁自己该学什么编程?适龄标准来啦(6到14岁的同学看过来哦)

文章目录 前言一、6岁以下1.推荐2.软件 二、6至10岁1.推荐2.软件(1)6-8:Nemo编程——Scratch图形化编程(2)8-10岁:Scratch编程——Python编程 三、10岁以后1.推荐2.软件(1)Python(2&…

【二等奖水平论文】2024五一数学建模C题22页保奖论文+22页matlab和13页python完整建模代码、可视图表+分解结果等(后续会更新)

一定要点击文末的卡片,那是资料获取的入口! 问题分析 2.1 问题一分析 对于问题一,干扰信号分析,分析干扰信号并识别干扰信号的时间区间。首先对数据集进行数据清洗,判断其异常值以及缺失值。利用matlab的find函数判…

力扣刷题第0天:只出现一次的数字

目录 第一部分:题目描述 ​第二部分:题目分析 第三部分:解决方法 3.1思路1: 双指针暴力求解 3.2 思路2:异或运算 第四部分:总结收获 第一部分:题目描述 第二部分:题目分析 由图片分析可得,该题目对算法时间复杂度有一定的要求时间复杂度为O(N)&a…

Linux的Shell脚本详解

本文目录 一、什么是 Shell 脚本文件 ?二、编写Shell脚本1. 基本规则2. shell 变量(1)创建变量(2)引用变量(3)删除变量(4)从键盘读取变量(5)特殊变…

《QT实用小工具·五十二》文本或窗口炫酷有趣的滚动条——果冻条

1、概述 源码放在文章末尾 该项目实现了文本或窗口纤细的滚动条——果冻条 一个可以像弓弦一样拉出来,并且来回弹动的普通滚动条。 思路为此,但发现实际效果更像条状果冻,并且略有谐音, 故,称之为——“果冻条”&am…

C/C++开发环境配置

配置C/C开发环境 1.下载和配置MinGW-w64 编译器套件 下载地址:https://sourceforge.net/projects/mingw-w64/files/mingw-w64/mingw-w64-release/ 下载后解压并放至你容易管理的路径下(我是将其放在了D盘的一个software的文件中管理) 2.…

IBM FlashSystem 5300入门级全闪存存储平台解读

IBM FlashSystem 5300作为一款面向入门级市场的全闪存存储平台,其发布标志着IBM在满足不同规模企业对于高性能、高性价比存储解决方案需求方面迈出了重要一步。以下是从技术角度出发,结合市场对比进行的客观分析: 技术亮点解析 高性能与高密度…

C语言 | Leetcode C语言题解之第64题最小路径和

题目&#xff1a; 题解&#xff1a; int minPathSum(int** grid, int gridSize, int* gridColSize) {int rows gridSize, columns gridColSize[0];if (rows 0 || columns 0) {return 0;}int dp[rows][columns];dp[0][0] grid[0][0];for (int i 1; i < rows; i) {dp[i…

启发式搜索算法1 - 最佳优先搜索算法

启发式搜索算法有什么优势&#xff1f; 对于复杂问题的盲目搜索&#xff0c;常用广度优先搜索和深度优先搜索这两种盲目搜索算法&#xff0c;极大极小值和Alpha-beta剪枝算法是在盲目搜索过程中&#xff0c;通过剪枝避开一些不可能的结果&#xff0c;从而提高效率。 如果搜索…

实习面试之算法准备:数学题

目录 1 技巧2 例题2.1 Nim 游戏2.2 石子游戏2.3 灯泡开关 1 技巧 稍加思考&#xff0c;找到规律 2 例题 2.1 Nim 游戏 你和你的朋友&#xff0c;两个人一起玩 Nim 游戏&#xff1a; 桌子上有一堆石头。 你们轮流进行自己的回合&#xff0c; 你作为先手 。 每一回合&#xf…

查询每个部门工资最高的员工 sql

在线运行sql语句 CREATE TABLE dept (dno INT PRIMARY KEY AUTO_INCREMENT,dname VARCHAR(50) NOT NULL,dlocal VARCHAR(100) ); CREATE TABLE employee (eno INT PRIMARY KEY AUTO_INCREMENT,ename VARCHAR(50) NOT NULL,egender CHAR(2),deptno INT NOT NULL,ejob VARCHAR(5…

KindEditor 漏洞:历史与现状

零基础入门学习路线 视频配套资料&国内外网安书籍、文档 网络安全面试题 KindEditor 是一款开源的富文本编辑器&#xff0c;曾广泛应用于各种网站和 CMS 系统。 然而&#xff0c;它也曾曝出多个安全漏洞&#xff0c;对使用它的网站造成安全风险。 历史漏洞&#xff1a; 文…