快慢指针

  • 前言
  • 一、环形链表
  • 二、快慢指针的两点知识
  • 总结
  • 参考文献

前言

保持快慢指针对环形链表的敏感性,快慢指针的相遇情况可以判断是否有环存在。但是认识不能止步于此,快慢指针相遇的点,说明了头节点到该点的距离==该点再走到该点的距离,比较快慢在距离的体现上就是一个2倍关系。

一、环形链表


二、快慢指针的两点知识

package com.xhu.offer.everyday;//环形链表2
public class DetectCycle {/*1-找到是否有环?2-如果有环,该如何寻找到入环点?1-快慢指针,如果能相遇,则一定有环;否则无环。2-快慢指针的行为-相遇型-特征:头节点 到 相遇节点 的 距离 == 相遇节点 再到 相遇节点的 距离,比较快慢指针 就是 体现了二倍关系。那么入环节点到相遇节点是固定的,而从头节点和相遇节点再走到相遇节点,都要经过这一条路径,且两距离相等,那么它们俩势必在入口节点相遇。*/public ListNode detectCycle(ListNode head) {//寻找相遇节点ListNode slow = head, fast = slow;while (fast != null && fast.next != null) {slow = slow.next;fast = fast.next.next;if (slow == fast) break;}//1-无环情况if (fast == null || fast.next == null) return null;//2-有环情况,开始寻找公共入口节点。注:根据快慢指针走的距离有二倍特性来解题。slow = head;//从head 出发while (slow != fast) {slow = slow.next;fast = fast.next;}//返回公共路径的第一个节点,也就是入环节点。return fast;}// Definition for singly-linked list.class ListNode {int val;ListNode next;ListNode(int x) {val = x;next = null;}}}

总结

1)保持快慢指针对环形链表的敏感性
2)不能停留在快慢指针判断环的基础上,还要分析快慢指针的特点,加以利用,才能将代码简洁,也尽可能减少运行时间。

参考文献

[1] LeetCode 环形链表II

环形链表与快慢指针的关系相关推荐

  1. 环形链表的快慢指针相遇问题证明

    环形链表的快慢指针相遇问题证明 证明1:慢指针一定在环形链表一圈内遇上 首先假设慢指针的每次只走1步,快指针每次走2步,当慢指针走了k次后,慢指针共走了k步,而快指针走了2k步. 假如说,快指针和慢指 ...

  2. 环形链表的快慢指针相遇问题以及相遇位置的证明

    假设有这么一个环形链表 第一步 设慢指针走到环的入口处走了K个结点,则快指针走了2K个结点 则有 2 K − K = α + n C 2K-K=α + nC 2K−K=α+nC 其中,α是快指针距离环 ...

  3. leetcode 141. 环形链表(快慢指针解法)

    题目 思路 绝对的经典题目,快慢指针,慢指针一次走两步,快指针一次走一步,直到两指针相遇,则说明有环. 关于评论区看到的一种思路,本质是做标记.这个办法不是很好,一方面,如果测试用例足够全的话,标记内 ...

  4. 【LeetCode】【HOT】141. 环形链表(快慢指针)

    [LeetCode][HOT]141. 环形链表 文章目录 [LeetCode][HOT]141. 环形链表 package hot;class ListNode{int val;ListNode n ...

  5. 试编写一个将双向循环链表逆置的算法_图解:链表的快慢指针,解决 80% 的链表面试题!...

    一.前言 链表是基本的数据结构之一,它与数组不同,数组在内存中存储,需要一块连续的内容空间来存储,对内存的要求比较高.例如我们需要 100MB 大小的数组,内存中就必须有一段连续的 100MB 的内存 ...

  6. 数据结构链表之单链表的快慢指针——3

    单链表之快慢指针 单链表的快慢指针简介 快慢指针指链表中定义两个指针,两个指针的移动速度一快一慢,一般快指针移动步长为慢指针的两倍 快慢指针适合解决的几个典型问题 中间值问题 单向链表是否有环问题 有 ...

  7. c 链表之 快慢指针 查找循环节点(转)

    上面分析了 根据这张图 推倒出 数学公式. 刚接触 不能一下弄明白.下面结合上面文章的分析.仔细推倒一下 , 一般设置 快指针 速度是 慢指针的2倍.及 快指针每次遍历两个指针, 慢指针每次遍历1个指 ...

  8. 链表中快慢指针的应用

    目录 一.链表的中间结点 二.回文链表 三.链表中倒数第K个结点 四.删除链表的倒数第n个结点 五.环形链表 六.环形链表Ⅱ 一.链表的中间结点 给定一个头结点为 head 的非空单链表,返回链表的中 ...

  9. reorder-list——链表、快慢指针、逆转链表、链表合并

    Given a singly linked list L: L0→L1→-→Ln-1→Ln, reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→- You must do th ...

  10. leetcode 234. 回文链表(快慢指针+链表倒置)

    请判断一个链表是否为回文链表. 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 代码 /*** Definitio ...

最新文章

  1. Java学习笔记13
  2. Android中的windowSoftInputMode属性详解
  3. 在程序中进行make以后出现的一些错误以及解决方法
  4. swagger导出excel文档_将Swagger2文档导出为HTML或markdown等格式离线阅读
  5. Java线程池的工作原理与实现
  6. p2020开发_2020年最佳开发者社区
  7. 极简风格的响应式简历模板
  8. Javascript:一些基本语法
  9. Google街景下载
  10. 网站静态页面克隆 | 学习笔记
  11. 数仓之事实表和维度表
  12. linux打开caj文件,在Deepin、UOS、Linux下打开caj格式文件的软件
  13. 阴暗的底层阶级版罗密欧与朱丽叶——甲贺忍法帖
  14. 反转二叉树--递归和非递归
  15. 大学学java的就业方向_学Java的就业方向有哪些?
  16. sip 信令组成的基本格式 总结
  17. 佛山市南海技师学校计算机类,2019年佛山南海信息技术学校招生录取分数线
  18. Symbiosis(共生)和Commensalism(共栖)的区别
  19. ethereumjs/ethereumjs-icap
  20. python学习日记(内置、匿名函数练习题)

热门文章

  1. linux系统怎么修改数据库密码,Linux系统修改数据库密码相关
  2. 47 jquery 计时器 选择器 筛选器 左边菜单栏
  3. 基于Sobel算法的边缘检测简介
  4. 浙大PAT甲级题目1061-1080代码详细解答|标准答案|C++语言|浙软机试
  5. Mac苹果电脑登录其他用户教程
  6. iozone测试IO方法
  7. 阿里菜鸟java岗面试
  8. cad打印去掉边框_CAD打印的时候如何去掉打印线框?
  9. 【游戏开发指路】Unity学习路线,三万字大纲(面试题大纲 | 知识图谱 | Unity游戏开发工程师)
  10. vs开发海康sdk HCNetSDK.dll 找不到指定的模块 试图加载格式不正确的程序