当前位置: 首页 > news >正文

指向任意节点的带环链表

🌈图示指向任意节点的带环链表

如图:
在这里插入图片描述

🌈快慢指针法判断链表是否带环

🌟思路:快指针fast一次走2步,慢指针slow一次走1步,fast先进环在换中运动,随后slow进入环。两指针每同时移动一次,二者的相对距离减少1,此时二者一定会在环中相遇。
🌟同时还可得出结论:相遇时slow不可能走过一整个环。相同时间内fast走过的路程是slow的二倍,fast和slow相遇时,slow一定不可能走过了一整个环(假设slow走过了一次整个环,则fast走过了两次环,在这期间二者一定会相遇,因此假设不成立)。
🌟图示fast和slow相遇过程:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

🌟拓展思考:快指针fast一次走3步,慢指针slow一次走1步,此时一定会相遇吗?(C是圆环长度)
🌟答:不一定,当C-1为奇数时永远不会相遇。slow进环后,每同时移动一次,二者距离缩小2。当fast在slow后面且相隔1个节点时,再移动一次变成了fast在slow前且相隔1节点,进入了新一轮追逐,追逐距离还是是C-1(注意:追逐距离不是C-2),而C-1是奇数时,不管怎么减2,都不可能减为0,只会从1减到-1,又进入新一轮循环,追逐距离还是C-1,奇数,陷入死循环。
在这里插入图片描述

🌟根据原理类推,fast一次走4步,slow一次走一步,每次距离缩小3。当环的周长C为3的倍数时,会相遇,C的长度模3余2时,陷入死循环,循环时每轮追击距离为C-1;当环的周长模3余1时,陷入死循环,循环时每轮追击距离为C-2。
在这里插入图片描述

🌈找到带环链表中环的起始点

🌟由上文得出结论:fast和slow相遇时slow不可能走过一整个环,但是fast在slow进环前可能已经在环里走了好多圈了。此时fast大概率走了n-1圈但还没有走够n圈(当然巧合情况是fast刚好走了n圈),但是在fast追slow的过程中一定会把n圈补齐。
(想象一个L非常大,C非常小的带环链表),如下图:
在这里插入图片描述
🌟公式推导:
假设起点到入口点长度:L
假设环的周长:C
假设入口点到相遇点的数据:X
fast与slow相遇时:
slow走过的总长度:L+X;fast走过的总长度:L+n ∗ * c+X
列出方程:
2(L+X)=L+n ∗ * C+X ⇒ L+X=n ∗ * C ⇒ L=n ∗ * C-X
具象说明:一个指针从起点走,另一个指针从相遇点走,它们会在入口点相遇
在这里插入图片描述

☀️OJ题1:判断链表是否带环

链接: https://leetcode.cn/problems/linked-list-cycle/description/
在这里插入图片描述
在这里插入图片描述

思路:fast一次走两步,slow一次走一步,若有环则两指针一定会相遇。

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/
bool hasCycle(struct ListNode *head) {struct ListNode*fast=head,*slow=head;while(fast&&fast->next){fast=fast->next->next;slow=slow->next;if(slow==fast)return slow;}return NULL;
}

☀️OJ题2:返回入环节点

链接: https://leetcode.cn/problems/linked-list-cycle-ii/description/
在这里插入图片描述
在这里插入图片描述

🌟法一:公式法( L=n ∗ * C-X)。

先让fast和slow相遇,再让一个指针从相遇点走,另一个指针从头节点走,两指针相遇点即为入环节点。

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/
struct ListNode *detectCycle(struct ListNode *head) {struct ListNode* slow=head,*fast=head,*meet;while(fast&&fast->next){fast=fast->next->next;slow=slow->next;if(fast==slow){meet=fast;while(meet!=head){meet=meet->next;head=head->next;}return head;}}return NULL;
}

🌟法二:切断环,交叉链表求交点。

先让fast和slow相遇,从相遇点出断开环,此时演变为交叉链表求交点问题(先让长链表走差距步,再同时走,相遇处即环的起点)

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/
struct ListNode *detectCycle(struct ListNode *head) {struct ListNode*fast=head,*slow=head,*meet,*meetnext;struct ListNode*head1,*head2;int count1=0,count2=0;while(fast&&fast->next){fast=fast->next->next;slow=slow->next;if(fast==slow){meet=slow;meetnext=meet->next;meet->next=NULL;head1=head;head2=meetnext;while(head1){head1=head1->next;count1++;}while(head2){head2=head2->next;count2++;}int sub=count1-count2;head1=head;head2=meetnext;if(sub>0){while(sub--){head1=head1->next;}}else if(sub==0){;}else{while(sub++){head2=head2->next;}}while(head1!=head2){head1=head1->next;head2=head2->next;}return head1;}}return NULL;
}

相关文章:

指向任意节点的带环链表

🌈图示指向任意节点的带环链表 如图: 🌈快慢指针法判断链表是否带环 🌟思路:快指针fast一次走2步,慢指针slow一次走1步,fast先进环在换中运动,随后slow进入环。两指针每同时移动…...

应用于伺服电机控制、 编码器仿真、 电动助力转向、发电机、 汽车运动检测与控制的旋变数字转换器MS5905P

MS5905P 是一款 12bit 分辨率的旋变数字转换器。 片上集成正弦波激励电路,正弦和余弦允许输入峰峰值 幅度为 2.3V 到 4.0V ,可编程激励频率为 10kHz 、 12kHz 、 15kHz 、 20kHz 。 转换器可并行或串行输出角度 和速度对应的数字量。 MS5905…...

Ansible学习笔记(持续更新)

Ansible学习目录 1.自动化运维1.1 企业实际应用场景1.1.1 Dev开发环境1.1.2 测试环境1.1.3 发布环境1.1.4 生产环境1.1.5 灰度环境 1.2 程序发布1.3 自动化运维应用场景1.4 常用自动化运维工具 2.Ansible介绍和架构2.1 Ansible特性2.2 Ansible架构2.2.1 Ansible主要组成部分2.2…...

CCF HPC China2023|澎峰科技:使能先进计算,赋能行业应用

CCF HPC China2023圆满落幕! 桂秋八月,为期三天的中国高性能计算领域最高规格盛会——2023CCF全球高性能计算学术年会(HPC China)在青岛红岛国际展览中心圆满落幕。行业超算大咖、顶级学界精英、先锋企业领袖参会者齐聚山东青岛&a…...

【FlowDroid】一、处理流程学习

FlowDroid 一、处理流程学习 下载配置源码概况代码逻辑分析analyzeAPKFilerunInfoflowprocessEntryPointcalculateCallbacks(sourcesAndSinks)再次回到processEntryPoint 自己做一些笔记 下载配置 参照我前面的文章可以使用FlowDroid安装初体验 为了看代码了解FlowDroid如何处…...

MyBatis——MyBatis插件原理

摘要 本博文主要介绍MyBatis插件机原理,帮助大家更好的理解和学习MyBatis。 一、插件机制概述 MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。默认情况下,MyBatis允许使用插件来拦截的方法调用包括: Executor (update, que…...

简易虚拟培训系统-UI控件的应用5

目录 Toggle控件简介 示例-使用Toggle组实现主轴速度选择 本篇介绍UI控件Toggle,尝试一个小示例-使用单选框实现速度的选择控制。 Toggle控件简介 1. Toggle的结构如下:最重要的Toggle组件挂在Toggle节点上,下面的Image组件用于显示单选框…...

Lnmp架构

关闭防火墙 安装依赖包 yum -y install pcre-devel zlib-devel gcc gcc-c make 创建运行用户、组 编译安装Nginx 让系统识别nginx的操作命令 添加Nginx系统服务 vim /lib/systemd/system/nginx.service 编译安装mysql 安装Mysql环境依赖包 创建运行用户 编译安装 cd /opt …...

es5的实例__proto__(原型链) prototype(原型对象) {constructor:构造函数}

现在看这张图开始变得云里雾里,所以简单回顾一下 prototype 的基本内容,能够基本读懂这张图的脉络。 先介绍一个基本概念: function Person() {}Person.prototype.name KK;let person1 new Person();在上面的例子中, Person …...

Oracle DBlink使用方法

DBlink作用:在当前数据库中访问另一个数据库中的表中的数据 create public database link dblink名称 connect to 对方数据库用户名 identified by 对方数据库用户密码 using (DESCRIPTION (ADDRESS_LIST (ADDRESS (PROTOCOL TCP)(HOST 要连接的数据库所在服务…...

UE4 植物生长

这个可以改变SplineMesh朝向...

企业应用系统 PHP项目支持管理系统Dreamweaver开发mysql数据库web结构php编程计算机网页

一、源码特点 PHP 项目支持管理系统是一套完善的web设计系统 应用于企业项目管理,从企业内部的各个业务环境总体掌握,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 php项目支撑管理系统2 二、功能介绍 (1)权限管理&#xff1…...

微服务通信[HTTP|RPC同步通信、MQ异步通信]

概念 A服务调用B服务,B服务调C服务,C服务调D服务,即微服务之间的通信(也可以叫微服务之间的调用) HTTP同步通信 一种轻量级的通信协议,常用于在不同的微服务之间进行通信,也是最简单的通信方式使用REST ful为开发规范,将服务对外暴露的HTTP调用方式为REST API(如GET…...

C语言模拟最简单的计算机

C语言模拟最简单的计算机 以下内容参考南大“计算机系统基础”实验:不停计算的机器 概述 如下面的伪代码所示,计算机运行程序的过程为取指令–>运行指令–>更新PC的值。 while (1) {从PC指示的存储器位置取出指令;执行指令;更新PC; }取指(inst…...

c++图论免费ppt,简单深度理解图论

本篇博文想分享一个ppt,是帮助大家简单深度理解c图论. 作者承诺:分享的东西没有病毒,是资料。 分享的东西一个是ppt,ppt里面是150页的,里面将带领大家简单深度理解c图论,还有一个就是里面例题的数据,大家可以按照数据…...

xml中in的使用

目录 一、简介 二、使用 1、参数为list 2、参数为Array 3、参数为Map XML中大于、小于、不等于符号使用 一、简介 在xml中使用in查询需要使用foreach标签 <foreach item"item" collection"list" index"index" open"(" sep…...

Unity生命周期函数

1、Awake 当对象&#xff08;自己这个类对象&#xff0c;就是这个脚本&#xff09;被创建时 才会调用该生命周期函数 类似构造函数的存在 我们可以在一个类对象创建时进行一些初始化操作 2、OnEnable 失活激活&#xff08;这个勾&#xff09; 想要当一个对象&#xff08;游戏…...

【OpenCV入门】第六部分——腐蚀与膨胀

文章结构 腐蚀膨胀开运算闭运算形态学方法梯度运算顶帽运算黑帽运算 腐蚀 腐蚀操作可以让图像沿着自己的边界向内收缩。OpenCV通过”核“来实现收缩计算。“核”在形态学中可以理解为”由n个像素组成的像素块“&#xff0c;像素块包含一个核心&#xff08;通常在中央位置&…...

[C++] STL_list常用接口的模拟实现

文章目录 1、list的介绍与使用1.1 list的介绍1.2 list的使用 2、list迭代器3、list的构造4、list常用接口的实现4.1 list capacity4.2 插入删除、交换、清理4.2.1 insert任意位置插入4.2.2 push_front头插4.2.3 push_back尾插4.2.4 erase任意位置删除4.2.5 pop_front头删4.2.6 …...

js实现点击查看全部/收起功能

在上一篇文章实现用js截取文本后&#xff0c;我的另一个需求也迎刃而解了。需求就是一段长文本需要溢出隐藏&#xff0c;然后点击全部时显示全部文本&#xff0c;点击收起又回到溢出隐藏的状态。实现的效果如下图&#xff1a; 实现的思路时点击全部时使用这条数据的原文本&…...

GB28181国标协议实战:用WVP+ZLMediaKit搭建一个支持级联的轻量级视频中台

GB28181国标协议实战&#xff1a;构建轻量级视频中台的架构设计与实现 在安防监控与视频管理领域&#xff0c;GB28181协议已经成为设备互联互通的事实标准。对于需要整合多品牌设备、实现统一管理的技术团队而言&#xff0c;如何快速搭建一个稳定可靠的视频中台是项目落地的关键…...

K8s 下 PD 分离推理的稳定之道:RBG 编排实践与优化

1. 为什么需要PD分离推理架构&#xff1f; 大模型推理过程中最头疼的问题就是资源利用率低。传统架构下&#xff0c;一个GPU实例既要处理完整的prompt预填充&#xff08;Prefill&#xff09;&#xff0c;又要负责逐token的解码&#xff08;Decode&#xff09;&#xff0c;就像…...

突破限制:3大核心功能让MediaCreationTool.bat成为Windows安装自由的终极解决方案

突破限制&#xff1a;3大核心功能让MediaCreationTool.bat成为Windows安装自由的终极解决方案 【免费下载链接】MediaCreationTool.bat Universal MCT wrapper script for all Windows 10/11 versions from 1507 to 21H2! 项目地址: https://gitcode.com/gh_mirrors/me/Media…...

新手福音:在快马平台上手accelerate,轻松理解分布式训练基础

新手福音&#xff1a;在快马平台上手accelerate&#xff0c;轻松理解分布式训练基础 作为一个刚接触深度学习的新手&#xff0c;分布式训练听起来总是让人望而生畏。各种复杂的配置、环境搭建和代码修改&#xff0c;常常让人在入门阶段就打了退堂鼓。直到我发现了accelerate库…...

一键部署+可视化训练:Llama Factory让大模型定制如此简单

一键部署可视化训练&#xff1a;Llama Factory让大模型定制如此简单 1. 为什么选择Llama Factory&#xff1f; 大模型微调一直是AI开发者面临的技术挑战之一。传统方法需要编写大量代码、处理复杂的环境配置&#xff0c;并且对硬件资源要求极高。Llama Factory的出现彻底改变…...

技术债务管理:如何与产品经理就“还债”达成共识?

在追求快速迭代和功能交付的软件开发浪潮中&#xff0c;技术债务如同潜伏在系统深处的“慢性病”&#xff0c;悄然累积&#xff0c;最终可能引发系统脆弱、交付迟滞、团队士气低落等一系列并发症。对于软件测试从业者而言&#xff0c;技术债务带来的影响尤为直接&#xff1a;测…...

效率倍增:用快马生成万文通核心文本处理模块,告别重复编码

效率倍增&#xff1a;用快马生成万文通核心文本处理模块&#xff0c;告别重复编码 最近在开发一个多语言文本处理工具"万文通"&#xff0c;需要频繁实现翻译、摘要和关键词提取功能。每次从零开始写这些基础模块太耗时&#xff0c;于是我尝试用InsCode(快马)平台快速…...

解决PARSEC 3.0安装中的常见问题:从gcc缺失到native输入配置

解决PARSEC 3.0安装中的常见问题&#xff1a;从gcc缺失到native输入配置 在性能测试和基准评估领域&#xff0c;PARSEC 3.0作为一套广泛使用的多线程基准测试套件&#xff0c;为研究人员和开发者提供了评估系统性能的强大工具。然而&#xff0c;在实际安装和配置过程中&#x…...

最近在折腾语音端点检测的时候发现个有意思的方法——频带方差检测。这玩意儿特别适合对付环境噪声,原理简单粗暴但有效。今天咱们就手撕代码看看它怎么玩转语音段定位

基于matlab的频带方差端点检测&#xff0c;噪声频谱中&#xff0c;各频带之间变化很平缓&#xff0c;语音各频带之间变化较激烈。 据此特征&#xff0c;语音和噪声就极易区分。 计算短时频带方差&#xff0c;实质就是计算某一帧信号的各频带能量之间的方差。 这种以短时频带方差…...

2025年短剧APP开发选型指南:uniApp混合开发 vs 安卓原生,哪个更适合你?

2025年短剧APP开发选型指南&#xff1a;uniApp混合开发 vs 安卓原生&#xff0c;哪个更适合你&#xff1f; 在短视频内容消费持续爆发的当下&#xff0c;微短剧作为一种新兴的内容形态正在迅速崛起。对于想要抓住这一风口的创业团队来说&#xff0c;技术选型往往成为第一个关键…...