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

【C语言】【数据结构】【环形链表判断是否带环并返回进环节点】有数学推导加图解

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

1.判断是否带环:

用快慢指针
slow指针一次走一步,fast指针一次走两步
当两个指针相遇时,链表带环;两个指针不能相遇时,当fast走到倒数第一个节点或为空时,跳出循环返回空指针。

那么slow指针一次走一步,fast指针一次走两步是否一定能追上呢?
在这里插入图片描述
fast永远比slow快一步,所以两者之间每走一次举例减少 1 即 N-1,N-2,N-3…0

那么fast一次走三步,slow一次走一步呢?

2.找第一个入环节点:

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

假设环的节点数为C,环之外的节点数是L
这里可以分为三种情况:
N是偶数——>slow走第一圈追上
N是奇数,C-1是偶数——>一定能追上
N是奇数,C-1是奇数呢?

推导: 3L=L+n*C-N
2L=n * C-N
若 C为偶数,N为奇数,那么 n * C-N 不会是偶数
所以 N是奇数,C-1是奇数的情况不存在
结论:
slow走1步,fast走3步时一定能追上

3.代码实现:

struct ListNode *detectCycle(struct ListNode *head) {struct ListNode* slow=head;struct ListNode* fast=head;struct ListNode* meet=NULL;while(fast!=NULL&&fast->next!=NULL){slow=slow->next;fast=fast->next->next;if(slow==fast){meet=slow;goto next;}}return NULL;next:struct ListNode* cur=head;while(cur!=meet){cur=cur->next;meet=meet->next;}return meet;
}
http://www.lryc.cn/news/226442.html

相关文章:

  • 漏洞扫描-nuclei-poc编写
  • SpringBoot 自动配置
  • IP-guard WebServer 远程命令执行漏洞
  • 每次重启完IDEA,application.properties文件里的中文变成?
  • 【Truffle】四、通过Ganache部署连接
  • React 其他常用Hooks
  • 将 ONLYOFFICE 文档编辑器与 С# 群件平台集成
  • 使用电脑时提示msvcp140.dll丢失的5个解决方法
  • VR全景如何应用在房产行业,VR看房有哪些优势
  • 11月份 四川汽车托运报价已经上线
  • springcloud图书借阅管理系统源码
  • 主题模型LDA教程:LDA主题数选取:困惑度preplexing
  • Docker快速入门
  • 36 Gateway网关 快速入门
  • MyBatis的知识点和简单用法
  • KITTI数据集(.bin数据)转换为点云数据(.pcd文件)
  • 【电路笔记】-节点电压分析和网状电流分析
  • jenkins通知
  • 技术分享 | Spring Boot 异常处理
  • 【Python 千题 —— 基础篇】成绩评级
  • 【ARM Coresight OpenOCD 系列 2 -- OpenOCD 脚本语法详细介绍】
  • pytorch 初始化
  • process.env.XXX环境变量不生效的解决方法
  • QT项目|时间服务器架构
  • Java学习 10.Java-数组习题
  • Vue3使用vue-print-nb插件打印功能
  • Leetcode300 最长递增子序列
  • 2000-2022年上市公司数字化转型同群效应数据
  • Python 如何实践 Builder(生成器) 对象创建型设计模式?
  • 【Qt绘制小猪】以建造者模式绘制小猪