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

【数据结构OJ题】环形链表

原题链接:https://leetcode.cn/problems/linked-list-cycle/description/

目录

1. 题目描述

2. 思路分析

3. 代码实现


1. 题目描述

2. 思路分析

整体思路:定义快慢指针fast,slow,如果链表确实有环fast指针一定会在环内追上slow指针。

即慢指针一次走一步,快指针一次走两步,两个指针从链表起始位置开始运行,如果链表带环则一定会在环中相遇,否则快指针率先走到链表的末尾。

我们简化一下这个问题,用一个线段表示前面的不带环部分的链表,用一个圆圈表示带环部分的链表 。

 

slow一次走1步,fast一次走2步,一定能追上吗?(这里的走的步数可以理解成跳格子)

一定可以追上!

当slow进环以后,fast开始追及slow,假设入环时,它们之间的距离是N。每追及1次,它们之间的距离缩小1。当它们之间的距离为0时,就追上了。

 

 

扩展:

slow一次走1步,fast一次走3步,一定能追上吗?

当slow进环以后,fast开始追及slow,假设入环时,它们之间的距离是M。每追及1次,它们之间的距离缩小2。我们假设环的周长是C,这时我们就要分类讨论了:

由此我们可以知道,得看距离M和环的周长C的大小来具体情况具体分析!

那么如果slow一次走1步,fast一次走4步呢?

当slow进环以后,fast开始追及slow,假设入环时,它们之间的距离是K。每追及1次,它们之间的距离缩小3。我们假设环的周长是C,这时我们就要分类讨论了:

 由此我们可以知道,得看距离K和环的周长C的大小来具体情况具体分析!

3. 代码实现

/*** 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 true;}return false;
}

http://www.lryc.cn/news/137362.html

相关文章:

  • PySpark-核心编程
  • vue 在IOS移动端中 windon.open 等跳转外部链接后,返回不触发vue生命周期、mounted等相关事件-解决方法
  • 股票预测和使用LSTM(长期-短期-记忆)的预测
  • Docker搭建个人网盘、私有仓库
  • 3种获取OpenStreetMap数据的方法【OSM】
  • 数据处理与统计分析——MySQL与SQL
  • OpenCV之特征点匹配
  • 浅谈开关柜绝缘状态检测与故障诊断
  • Mybatis 动态 SQL
  • Android studio之 build.gradle配置
  • 【ElasticSearch】一键安装IK分词器无需其他操作
  • 在Ubuntu上启动一个简单的用户登录接口服务
  • 【PHP】函数-作用域可变函数匿名函数闭包常用系统函数
  • Python使用pymysql和sqlalchemy访问MySQL的区别
  • ubuntu服务器的mysql,更改root密码,并允许远程连接
  • 微信小程序【构建npm】使用记录
  • mybatis入门的环境搭建及快速完成CRUD(增删改查)
  • 《HeadFirst设计模式(第二版)》第九章代码——组合模式
  • iOS17 widget Content margin
  • 计网第四章(网络层)(一)
  • 【前端】vue3 接入antdv表单校验
  • CY3-COOH在蛋白质定位的特点1251915-29-3星戈瑞
  • 数据采集:selenium 获取某网站CDN 商家排名信息
  • 5.从头跑一个pipeline
  • leetcode原题: 堆箱子(动态规划实现)
  • Java中数组和集合的对比,以及什么情况下使用数组更合适,什么情况下使用集合更合适。集合的基本介绍和集合体系图。
  • STM32之17.PWM脉冲宽度调制
  • VS2015打开Qt的pro项目文件 报错
  • 骨传导耳机会头疼吗?骨传导耳机会对身体不好吗
  • 【面试题系列】(一)