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

news/2024/5/17 19:42:05

🎁个人主页:我们的五年

🔍系列专栏:数据结构

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

 

 前言:

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

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

🏝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.mrgr.cn/p/65560666

相关文章

Xcode隐私协议适配

1. Privacy manifest files 1.1 简介 自己App或三方SDK(通过XCFrameworks|Swift packages|Xcode projects集成的)需要包含一个隐私清单文件(privacy manifest)叫作 PrivacyInfo.xcprivacy。它是一个属性列表,记录了A…

盲人手机导航:科技之光引领无障碍出行新纪元

在这个日新月异的数字时代,科技不仅改变了我们获取信息的方式,更在无声中拓宽了视障人士的生活半径。盲人手机导航这一创新技术,正逐步成为他们探索世界、实现独立出行的重要伙伴。 对于大多数人而言,日常出行或许只是一次…

Python绘制的好看统计图

代码 sx [Accent, Accent_r, Blues, Blues_r, BrBG, BrBG_r, BuGn, BuGn_r, BuPu, BuPu_r, CMRmap, CMRmap_r, Dark2, Dark2_r, GnBu, GnBu_r, Greens, Greens_r, Greys, Greys_r, OrRd, OrRd_r, Oranges, Oranges_r, PRGn, PRGn_r, Paired, Paired_r, Pastel1, Pastel1_r, P…

特征重要性评估的随机森林算法与Python实现(三)

特征重要性评估(Variable importance measure, or Feature importance evaluation,VIM)用来计算样本特征的重要性,定量地描述特征对分类或者回归的贡献程度。随机森林(Random Forest)作为一种强大的机器学习算法,在特征重要性评估方面具有显著优势。特征重要新评估是随机森…

社会网络分析及其Python实现

社会网络分析(Social Network Analysis, SNA)在人类学、心理学、社会学、数学以及统计学等领域中发展起来,是综合运用图论、数学模型来研究社会行动者之间的关系或通过这些关系流动的各种有形或无形的东西,如信息、资源等,近年来逐渐成为一种热门的社会科学研究方法。社会…

Jenkins邮件发送失败问题解决

如下提示为 Extended E-mail Notification开启Debug模式下显示的错误信息, (Debug模式设置方法:Dashboard-> manage Jenkins->configure System)DEBUG SMTP: Attempt to authenticate using mechanisms: LOGIN PLAIN DIGEST-MD5 NTLM XOAUTH2 DEB…

工厂模式和策略模式区别

工厂模式和策略模式都是面向对象设计模式,但它们的目的和应用场景有所不同。 工厂模式是一种创建型设计模式,旨在通过使用一个工厂类来创建对象,而不是直接使用new关键字来创建对象。这样做可以使系统更容易扩展和维护,因为新的对…

IDA动态调试解RC4

IDA动态调试解RC4 本篇博客所有内容,均学习于无名侠大佬在bilibili的视频:https://www.bilibili.com/video/BV1WQ4y1X7TY LazyIDA熊猫版:https://github.com/P4nda0s/LazyIDA 实验文件下载:https://github.com/P4nda0s/SycRevLearn有一些算法的加密与解密是相同的算法过程,…

2024 java easyexcel poi word模板填充数据,多个word合成一个word

先看效果 一、准备工作 1.word模版 2.文件路径 二、pom依赖 <!-- easyexcel --><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.1.7</version></dependency><depe…

[CISCN 2022 华东北] duck

[CISCN 2022 华东北] duck UAF|leak_libc|leak_heap_base|指针加密|unsortedbin|one_gadget [*] /home/bamuwe/duck/pwnArch: amd64-64-littleRELRO: Full RELROStack: Canary foundNX: NX enabledPIE: PIE enabled$ checksec ./pwn/home/ubuntu/glibc/gl…

Apache Seata基于改良版雪花算法的分布式UUID生成器分析2

title: 关于新版雪花算法的答疑 author: selfishlover keywords: [Seata, snowflake, UUID, page split] date: 2021/06/21 本文来自 Apache Seata官方文档&#xff0c;欢迎访问官网&#xff0c;查看更多深度文章。 关于新版雪花算法的答疑 在上一篇关于新版雪花算法的解析中…

LeetCode - 买卖股票的最佳时机

121. 买卖股票的最佳时机 给出一个数组&#xff0c;在这个数组中&#xff0c;买入一支股票&#xff0c;并在未来的某一天卖出(不能当天买&#xff0c;当天卖)&#xff0c;如何获取最大利润。 如果你做过买卖股票2&#xff0c;那么在做这道题的时候&#xff0c;大概率是会想到动…

【已解决】Python Selenium chromedriver Pycharm闪退的问题

概要 根据不同的业务场景需求&#xff0c;有时我们难免会使用程序来打开浏览器进行访问。本文在pycharm中使用selenium打开chromedriver出现闪退问题&#xff0c;根据不断尝试&#xff0c;最终找到的问题根本是版本问题。 代码如下 # (1) 导入selenium from selenium import …

决策树分析及其在项目管理中的应用

决策树分析是一种分类学习方法&#xff0c;其主要用于解决分类和回归问题。在决策树中&#xff0c;每个内部节点表示一个属性上的测试&#xff0c;每个分支代表一个属性输出&#xff0c;而每个叶节点则代表类或类分布。通过从根节点到内部节点的路径&#xff0c;可以构建一系列…

Android 音视频基础知识

本系列文章会介绍两个 Android NDK Demo&#xff0c;拉流端会实现一个基于 FFmpeg 的视频播放器 Demo&#xff0c;推流端会实现一个视频直播 Demo&#xff0c;当然在做 Demo 之前会介绍音视频的基础知识。以下是本系列文章的目录&#xff1a; Android 音视频基础知识 Android 音…

如何同时或者按顺序间隔启动多个程序

首先,需要用到的这个工具:度娘网盘 提取码:qwu2 蓝奏云 提取码:2r1z1、打开工具,切换到定时器模块,快捷键:Ctrl+3 2、新建一个定时器,我这里演示同时打开多个程序(比如同时启动多个QQ,或者多个微信等),那就把单次数量提高,如果想每次执行这个定时器里面的3个事件…

ef core加密存储数据,如身份证号

一、新建项目,安装nuget<PackageReference Include="V6.EntityFrameworkCore.DataEncryption" Version="5.0.0" />二、本示例采用:AES+256bits(Can use a 128bits, 192bits or 256bits key)CipherMode mode = CipherMode.CBC, PaddingMode padding…

如何快速的追加文章的内容(在不知道内容的情况下)

首先,需要用到的这个工具:度娘网盘 提取码:qwu2 蓝奏云 提取码:2r1z 1、打开工具,切换到文章模块下,快捷键:Ctrl+12、新建一个文章做演示,001 3、添加一个内容,就随便写一个 4、保存、关闭 5、在新建的文章上右键,选择追加内容 6、弹出一个窗口,有三种选择,我这里就…

基于springboot实现公司日常考勤系统项目【项目源码+论文说明】

基于springboot实现公司日常考勤系统演示 摘要 目前社会当中主要特征就是对于信息的传播比较快和信息内容的安全问题&#xff0c;原本进行办公的类型都耗费了很多的资源、传播的速度也是相对较慢、准确性不高等许多的不足。这个系统就是运用计算机软件来完成对于企业当中出勤率…

随机森林Adaboosting算法与Python实现(二)

AdaBoost是Freund和Schapire于1996年提出的一种集成学习方法。它的核心思想是通过迭代训练一系列弱分类器,每次调整样本权重以便更好地拟合被前一轮分类器错误分类的样本,从而构建一个强分类器。最终的模型是基于这些弱分类器的加权组合。AdaBoost广泛应用于二分类和多分类问…