单链表之快慢指针

单链表的快慢指针简介

  • 快慢指针指链表中定义两个指针,两个指针的移动速度一快一慢,一般快指针移动步长为慢指针的两倍

快慢指针适合解决的几个典型问题

  1. 中间值问题
  2. 单向链表是否有环问题
  3. 有环链表的入口问题

先定义一个简单的节点

class Node:def __init__(self, item):self.item = itemself.next = Nonefirst = Node('aa')
second = Node('bb')
third = Node('cc')
forth = Node('dd')
fifth = Node('ee')first.next = second
second.next = third
third.next = forth
forth.next = fifth

中间值问题
即当快指针fast遍历完链表时,慢指针slow刚好停在链表的中间处

def middle(first):fast = firstslow = firstwhile fast.next and fast.next.next:fast = fast.next.nextslow = slow.nextreturn slowprint(f"The middle is: {middle(first).item}")

中间位置对应的结点是cc

有环链表

  • 有环链表定义:单链表中存在结点的指针往前指的链表称为有环链表
# 接上面定义结点的代码
# Create a ring
fifth.next = third
def has_ring(first):fast = firstslow = firstwhile fast.next and fast.next.next:fast = fast.next.nextslow = slow.nextif fast == slow:return Truereturn Falseprint(f"Is there a ring in the list? {has_ring(first)}")

为链表创建一个环,执行has_ring函数返回True,注释创建的环,则返回False

有环链表入口

  • 定义:当快慢指针相遇时,我们可以判定链表中存在环,此时,重新定义一个指针,指向链表的起点,这个指针的前进步长与慢指针的相同,当慢指针与“新”指针相遇时,所在节点就是环的入口

证明这一结点设计到数论知识,有兴趣可以研究,这里只进行实现
在有环链表的前提上,使用以下代码可判断环的入口

def get_the_entrance(first):# Create a new pointer, pointing to the beginningtemp = firstfast = firstslow = firstwhile fast.next and fast.next.next:fast = fast.next.nextslow = slow.nextif fast == slow:while True:temp = temp.nextslow = slow.nextif temp == slow:return tempprint(f"The entrance is: {get_the_entrance(first).item}")

前面的有环链表时aa→bb→cc→dd→ee(→cc),因此其环入口是cc对应所在的节点
The entrance is: cc

数据结构链表之单链表的快慢指针——3相关推荐

  1. python单链表实现具体例子_Python实现数据结构线性链表(单链表)算法示例

    本文实例讲述了Python实现数据结构线性链表(单链表)算法.分享给大家供大家参考,具体如下: 初学python,拿数据结构中的线性链表存储结构练练手,理论比较简单,直接上代码. #!/usr/bin ...

  2. 「数据结构 | 链表」单链表、双向链表节点操作演示动画

    目录 1. 什么是链表 2. 链表数据结构 2.1 单链表数据结构(Java) 2.2 双向链表数据结构(Java) 3. 单链表操作动画 3.1 新增节点 3.2 删除节点 4. 双向链表操作动画 ...

  3. 数据结构与算法--单链表相关面试题

    此文章仅作为自己学习过程中的记录和总结,同时会有意地去用英文来做笔记,一些术语的英译不太准确,内容如有错漏也请多指教,谢谢! 一.概述 获取单链表的有效元素个数[新浪面试题1] 获取单链表倒数第k个结 ...

  4. 【数据结构与算法】 01 链表 (单链表、双向链表、循环链表、块状链表、头结点、链表反转与排序、约瑟夫环问题)

    一.线性表 1.1 概念与特点 1.2 线性表的存储结构 1.3 常见操作 1.4 应用场景 二.链表 2.1 链表简介 2.2 单向链表(单链表) 2.21 基本概念 2.22 单链表基本操作 2. ...

  5. 数据结构之——《单链表》

    数据结构之--<单链表> 1.链表概念 2.链表分类 3.接口函数实现 1.链表概念 链表是一种物理存储结构上非连续,非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现. ...

  6. 数据结构精讲——单链表

    新手必会数据结构精讲--单链表 链表的介绍 概念:链表是一种物理存储结构上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 . 实际中链表的结构非常多样,以下情况组合起来就 ...

  7. 数据结构5: 链表(单链表)的基本操作及C语言实现

    逻辑结构上一个挨一个的数据,在实际存储时,并没有像顺序表那样也相互紧挨着.恰恰相反,数据随机分布在内存中的各个位置,这种存储结构称为线性表的链式存储. 由于分散存储,为了能够体现出数据元素之间的逻辑关 ...

  8. python数据结构基础(单链表,多链表,二叉树)

    python数据结构基础(单链表,多链表,二叉树) 数据结构指数据对象中数据元素之间的关系 Python 给我们提供了很多现成的数据结构类型,这些系统自己定义好的,不需要我们自己去定义的数据结构叫做 ...

  9. 【数据结构|链表】单链表基本操作

    文章目录 一.链表 二.链表分类 三.单链表基本操作   3.1 单链表存储结构Init   3.2 遍历链表visitlist函数   3.3 求表长length   3.4 查找listfind ...

最新文章

  1. Android中WIFI开发总结(一)
  2. IOS学习动画二之 Core Animation (3)
  3. (4.14)向上取整、向下取整、四舍五入取整的实例
  4. 新乡学院2019计算机报名,新乡学院2019年招生章程
  5. 当VS2005卸载不干净时
  6. cloudquery.php态势感知,CloudQuery v1.3.4 版本更新
  7. 单片机c语言论文参考文献,单片机应用程序论文,关于关于单片机应用编程的技巧相关参考文献资料-免费论文范文...
  8. 单片机c语言延时30s程序,单片机c语言中的精确延时程序
  9. 什么是HD , HDTV , BD(Blu-Ray) , HDDVD
  10. 火线零线接反等问题的分析(电工)
  11. Android EagleEye笔记
  12. 论文理解:“Designing and training of a dual CNN for image denoising“
  13. 前端Js获取本网IP和外网IP方法总汇
  14. GD32F330+DS18B20
  15. 我国近视人数已超6亿了,千万不要在黑暗的环境里看手机
  16. 【分享】解读时间同步(NTP网络授时服务器)的重要性
  17. mysql2008百度云_SQLServer数据库之SQL Server 2008R2 企业版 百度云下载地址
  18. 虚拟机VMware下安装RedHat Linux 9.0 图解
  19. re:Invent最重磅的演讲,AWS CEO透露了哪些关键信息?
  20. vue中使用element-tiptap

热门文章

  1. Java程序编译运行过程
  2. 接口 EnvironmentAware
  3. 数据库的完整性和安全性
  4. python 二元函数绘制_Python绘制二元函数曲面
  5. python中continue只结束本次循环_循环(while,break,continue),转义字符
  6. Django创建第一个应用
  7. 第一季2:视频设备开发的技术流
  8. vue项目创建,redis列表字典操作,django用redis的第二种方法
  9. ios 后台下载,断点续传总结
  10. shell 判断文件是否存在,没有则创建