数据结构练习题---环形链表详解

news/2024/5/19 1:19:49

链表成环,在力扣中有这样的两道题目

https://leetcode.cn/problems/linked-list-cycle/

https://leetcode.cn/problems/linked-list-cycle-ii/description/

这道题的经典解法是利用快慢指针,如果链表是一个环形链表,那么快指针(fast)和慢指针(slow)一定会相遇,那为什么它们会相遇呢?此时的快慢指针之间的关系是fast=2*slow,如果换成fast=3*slow/4*slow? 还会相遇吗? 

fast=2*slow推理如下 :

 fast=3*slow推理如下 :

理解原理之后,再写代码就简单得多:

bool hasCycle(struct ListNode *head) {struct ListNode*fast=head;struct ListNode*slow=head;while(fast&&fast->next){//刚开始的时候,slow和fast在同一个节点,注意要先移动fast=fast->next->next;slow=slow->next;if(fast==slow){return true;}}return false;
}

 这题的进阶版

同样离不开快慢指针,记录下它们相遇的点,再让开始的节点和相遇点同时移动,再次相遇的就是环的起始位置,分析如下: 

代码如下:

struct ListNode *detectCycle(struct ListNode *head) {struct ListNode*fast=head,*slow=head;while(fast&&fast->next){fast=fast->next->next;slow=slow->next;//记录相遇的点if(fast==slow){struct ListNode*meet=slow;struct ListNode* cur=head;//知道相遇while(meet!=cur){meet=meet->next;cur=cur->next;}return meet;}}return NULL;
}

http://www.mrgr.cn/p/43462757

相关文章

【c++】模板编程解密:C++中的特化、实例化和分离编译

🔥个人主页:Quitecoder 🔥专栏:c笔记仓 朋友们大家好,本篇文章我们来学习模版的进阶部分 目录 1.非类型模版参数按需实例化 2.模版的特化函数模版特化函数模版的特化类模版全特化偏特化 3.分离编译模版分离编译 1.非类…

2024-05-05 通达信选股 双黄连

黄金阴:=O>REF(C,1) AND C<O AND V<REF(V,1)*SL2; 黄金阳:= C>O AND O<REF(C,1) AND V<REF(V,1)*SL1 AND C<REF(C,1); COUNT(黄金阳,1)>=1 AND COUNT(黄金阴,5)>=1; ----------------------------------------------------------------------------…

01-MySQL 基础篇笔记

一、MySQL 概述 1.1 数据库相关概念 数据库&#xff1a;&#xff08;DB&#xff1a;DataBase&#xff09; 存储数据的仓库&#xff0c;数据是有组织的进行存储 数据库管理系统&#xff1a;&#xff08;DBMS&#xff1a;DataBase Management System&#xff09; 操作和管理数…

网课-微积分学习笔记

qwq微分有时也写作 \(\frac{\mathrm{d} y}{\mathrm{d} x}\)。 常见函数导数:可以认为,\(e\) 的定义就是 \((e^x) = e^x\)。 导数是一个线性的算子,即:其中 \(f(g(x))\) 指的是在求出 \(f(x)\) 后把 \(g(x)\) 代入。(以上定律根据 \(f(x+\Delta) = f(x)+f(x)\Delta+o(\Delt…

232Modbus转Profinet网关接扫码枪与PLC通讯

232Modbus转Profinet网关(XD-PNR100/300)的主要作用是实现Modbus协议和Profinet协议之间的转换和通信。本案例是用Modbus转Profinet网关接扫码枪与PLC通讯,扫码枪通常通过特定的接口与计算机或其他设备传输数据,而PLC(可编程逻辑控制器)则通常使用Profinet等工业通信协议…

Goose:Go语言渐进式的数据库迁移工具

Goose:Go语言渐进式的数据库迁移工具 原创 K8sCat 源自开发者 2024-05-04 22:57 广东 听全文源自开发者 专注于提供关于Go语言的实用教程、案例分析、最新趋势,以及云原生技术的深度解析和实践经验分享。 214篇原创内容公众号数据库迁移是软件开发过程中重要的一部分,随着业…

将java项目上传到GitHub步骤

文章目录 GitHub 作用github如何修改默认分支为master手把手教你把项目上传github上github怎么删除仓库或项目执行到push时报错的解决办法github怎么修改仓库语言 GitHub 作用 GitHub 是一个存放软件代码的网站&#xff0c;主要用于软件开发者存储和管理其项目源代码&#xff…

数据分析的五大流程:需求、获取、处理、分析、可视化

数据分析的五大流程:需求、获取、处理、分析、可视化

DDD:根据maven的脚手架archetype生成ddd多模块项目目录结构

随着领域驱动的兴起&#xff0c;很多人都想学习如何进行ddd的项目开发&#xff0c;那ddd的项目结构是怎么样的&#xff1f;又是如何结合SpringBoot呢&#xff1f;那么针对这个问题&#xff0c;笔者使用maven的archetype封装一个相对通用的ddd的项目目录&#xff0c;方便一键生成…

图像处理ASIC设计方法 笔记21 标记ASIC的顶层状态机

目录 (一)标记ASIC的工作流程1 ASIC首先从控制寄存器内读出待标记图像的基本参数2若写入了有效的启动命令,则进入下面一帧图像的标记过程。3 ASIC通过接口模块从FIFO1中读取待标记的图像4一帧图像初步标记完成后进行等价表的整理压缩5从临时标记存储器中读取临时标记送入标记…

Matlab各个版本介绍、区别分析及推荐

MATLAB&#xff0c;由美国MathWorks公司出品&#xff0c;是一款广泛应用的商业数学软件。自其诞生之初&#xff0c;MATLAB便以其强大的矩阵计算能力、灵活的编程环境以及广泛的应用领域&#xff0c;赢得了全球科研工作者和工程师的青睐。本文将详细介绍MATLAB的各个版本&#x…

智慧文旅展现文化新风貌,科技助力旅行品质升级:借助智慧技术,文旅产业焕发新生机,为旅行者带来更高品质的文化体验之旅

一、引言 在数字化、智能化的浪潮下&#xff0c;文旅产业正迎来前所未有的发展机遇。智慧文旅作为文旅产业与信息技术深度融合的产物&#xff0c;不仅为旅行者带来了全新的文化体验&#xff0c;也为文旅产业注入了新的活力。本文旨在探讨智慧文旅如何借助智慧技术展现文化新风…

让.NET 8 支持 Windows Vista RTM

众所周知,从 Windows 的每次更新又会新增大量 API,这使得兼容不同版本的 Windows 需要花费很大精力。导致现在大量开源项目已经不再兼容一些早期的 Windows 版本,比如 .NET 8 AOT编译命令行程序时生成的EXE,依赖以下三个函数,经查只有Windows 7 SP1以上系统才包含,具体参…

一毛钱不到的FH8208C单节锂离子和锂聚合物电池一体保护芯片

前言 目前市场上电池保护板&#xff0c;多为分体方案&#xff0c;多数场合使用没有问题&#xff0c;部分场合对空间有进一步要求&#xff0c;或者你不想用那么多器件&#xff0c;想精简一些&#xff0c;那么这个芯片就很合适&#xff0c;对于充电电池来说&#xff0c;应在使用…

ABC352

A link\(x\)停不到,\(y\)能停到。 要先判断是从前往后还是从后往前。点击查看代码 #include<bits/stdc++.h>using namespace std;signed main(){int n,x,y,z;cin >> n >> x >> y >> z;if(x <= y){if(z > x&&z <= y) cout <…

初识C语言——第九天

ASCII定义 在 C 语言中&#xff0c;每个字符都对应一个 ASCII 码。ASCII 码是一个字符集&#xff0c;它定义了许多常用的字符对应的数字编码。这些编码可以表示为整数&#xff0c;也可以表示为字符类型。在 C 语言中&#xff0c;字符类型被定义为一个整数类型&#xff0c;它占…

基于STC12C5A60S2系列1T 8051单片机的Proteus中的单片机发送一帧或一串数据给串口调试助手软件接收区显示出来的串口通信应用

基于STC12C5A60S2系列1T 8051单片机的Proteus中的单片机发送一帧或一串数据给串口调试助手软件接收区显示出来的串口通信应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机串口通信介绍STC12C5A60S2系列1T 8051单片机串口通信的结构基于STC12C5A60S2系列…

SSH远程访问及控制

SSH远程访问及控制 目录SSH远程访问及控制一、SSH远程管理1、SSH的概述二、配置OpenSSH1服务器1、sshd_config配置文件的常用选项设置2、实例操作三、sshd服务支持登录验证方式有:密码验证和密钥对验证,可以设置只使用其中一种,也可以都启用3.1 密码验证:3.2 密钥对验证:四…

8086 汇编学习 Part 9

端口的读写 CPU 的邻居CPU 内部的寄存器 内存单元 端口(各种接口卡、网卡,显卡,主板上的接口芯片等)各种芯片工作时,都有一些寄存器由 CPU 读写 从 CPU 角度,将各寄存器当端口,并统一编制 CPU 用统一的方法与各种设备通信读写端口的指令在对 \([0,255]\) 的端口进行读写…

安卓LayoutParams浅析

目录 前言一、使用 LayoutParams 设置宽高二、不设置 LayoutParams2.1 TextView 的 LayoutParams2.2 LinearLayout 的 LayoutParams 三、getLayoutParams 的使用四、setLayoutParams 的作用五、使用 setWidth/setHeight 设置宽高 前言 先来看一个简单的布局&#xff0c;先用 x…