问题:对一个链表,判断是否有环。存在环时,求出环的起始位置及环长度

使用快慢指针

1、判断是否有环,快指针移动两步,慢指针每次移动一步,看快慢指针是否会相遇

2、环的起始位置

如上图所示,假设快慢指针相遇点为离环起始位置 b,快指针移动距离为a+(b+c)n+b,慢指针移动距离为a+b,则有a+(b+c)*n+b=2(a+b) => a = (n-1)(b+c) + c。为什么慢指针在第一圈时就相遇?因为假设在环起始位置时,环长度为L,快指针在环上位置为b',慢指针经过c'相遇,则有c' mod L= (b' + 2c') mod L =>  c' + nL = b' + 2c' =>c' = nL - b' 当n=1时,c' = L - b'

在求环的起始位置时,将慢指针重置为链表的首位置,快慢指针每次前进一步,直到慢快指针相遇,此时相遇位置即为环的起始位置。

3、环的长度。在求得环的起始位置后,计数重置为0,慢指针每次前进一步,计数加1,直到慢指针等于快指针。此时计数值就是环的长度

Floyd cycle算法相关推荐

  1. 【算法】弗洛伊德(Floyd)算法

    这个算法主要要弄懂三个循环的顺序关系. 弗洛伊德(Floyd)算法过程: 1.用D[v][w]记录每一对顶点的最短距离. 2.依次扫描每一个点,并以其为基点再遍历所有每一对顶点D[][]的值,看看是否 ...

  2. LeetCode Linked List Cycle II(floyd cycle)

    问题:给出一个链表,可能存在环,要求输出环的起点位置 思路:使用Floyd cycle algorithm 具体代码参考: https://github.com/wuli2496/OJ/tree/ma ...

  3. C++floyd warshall算法求最短路径(附完整源码)

    C++floyd warshall算法求最短路径 floyd warshall算法求最短路径的完整源码(定义,实现,main函数测试) floyd warshall算法求最短路径的完整源码(定义,实现 ...

  4. Floyd Warshall算法

    Description: 描述: This is a very popular interview problem to find all pair shortest paths in any gra ...

  5. 七、最短路径——弗洛伊德(Floyd)算法

    为了能讲明白弗洛伊德(Floyd)算法的精妙所在,我们先来看最简单的案例.下图是一个最简单的3个顶点连通网图. 我们先定义两个二维数组D[3][3]和P[3][3],D代表顶点到顶点的最短路径权值和的 ...

  6. 【数据结构】图—弗洛伊德(Floyd)算法

    前言 上文介绍了迪杰斯特拉(Dijkstra)算法,计算网图的某个源点到其余各个顶点的最短路径问题(边权值为非负值),本文介绍另一个求最短路径的算法--弗洛伊德算法,它是计算所有顶点到所有顶点的最短路 ...

  7. 弗洛伊德(Floyd)算法之两点之间的最短距离问题

    1.概述 (1)与迪杰斯特拉(Dijkstra)算法一样,弗洛伊德(Floyd)算法也是一种用于寻找给定的加权图中顶点间最短路径的算法,该算法 名称以创始人之一.1978 年图灵奖获得者.斯坦福大学计 ...

  8. 【Floyd最短路径算法】--python实现

    目录 1.Floyd是干嘛的 2.基本思想 3.代码如下 4.逆推到起点 代码如下 5.完整代码 1.Floyd是干嘛的 该算法也称为Floyd算法,Roy-Warshall算法,Roy-Floyd算 ...

  9. 数据结构——图——弗洛伊德(Floyd)算法

    数据结构--图--弗洛伊德(Floyd)算法 为了能讲明白弗洛伊德(Flbyd)算法的精妙所在,我们先来看最简单的案例.图7-7-12的左图是一个最简单的3个顶点连通网图. 我们先定义两个二维数组D[ ...

最新文章

  1. 两个点 定位_深圳Mark点定位的一般原理与步骤
  2. 高手进阶:/etc/profile环境变量配置解析
  3. pythonsys标准_python 以标准输出(sys.stdout)为例,看python的标准输入、标准错误输出...
  4. python关于字符串下面说法错误的是_关于字符串下列说法错误的是
  5. FLEX XMLLIST 详解
  6. 如何在一台没有网的电脑上安装anaconda_简述验证Anaconda是否安装成功的两种方式...
  7. Vi编辑器的基本使用方法及vi和Vim的区别【ZT】
  8. 用Scala实现简单的Web和API服务器
  9. HttpClient如何解决302重定向问题
  10. java过滤器流程_DRF filter 过滤器实现流程
  11. 老板口中的一区二区是什么意思?
  12. ucgui界面 vc_【MM32F103试用体验】ucGUI + FreeRTOS +触摸屏图形界面开发
  13. 在线词云工具Tagxedo的使用
  14. 2019-09-11想念艾青,想念《大堰河——我的保姆》
  15. 联想一体机用u盘装linux教程,联想一体机如何用u盘装系统
  16. 在微信小程序中制作的登录功能一定要考虑不同的入口问题
  17. Image To PDF or XPS V4.2 汉化版,tek2y原创汉化!
  18. Java:Windows 10下载和配置JDK
  19. 《软技能——代码之外的生存指南》读书笔记之职业(一)
  20. 腾讯物联TencentOS tiny上云初探

热门文章

  1. bundle 的生成和使用
  2. (笔记)Mysql命令select from:查询表中的数据(记录)
  3. 基于MIPS架构的BackTrace实现
  4. python语言是编译型语言-Python程序的执行过程原理(解释型语言和编译型语言)...
  5. python是一种什么类型的编程语言-Python这么火,为什么说它不是未来的编程语言?...
  6. 全国青少年软件编程python等级考试-全国青少年软件编程等级考试:Python一级考试大纲...
  7. 小学生python入门-极度舒适的全套 Python 入门教程,小学生看了也能学会
  8. python操作系统-Python_操作系统的发展史
  9. python官网怎么下载-python下载官网
  10. 手机上开发python有哪些软件-哪个手机软件有python题库