数据结构链表之单链表的快慢指针——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相关推荐
- python单链表实现具体例子_Python实现数据结构线性链表(单链表)算法示例
本文实例讲述了Python实现数据结构线性链表(单链表)算法.分享给大家供大家参考,具体如下: 初学python,拿数据结构中的线性链表存储结构练练手,理论比较简单,直接上代码. #!/usr/bin ...
- 「数据结构 | 链表」单链表、双向链表节点操作演示动画
目录 1. 什么是链表 2. 链表数据结构 2.1 单链表数据结构(Java) 2.2 双向链表数据结构(Java) 3. 单链表操作动画 3.1 新增节点 3.2 删除节点 4. 双向链表操作动画 ...
- 数据结构与算法--单链表相关面试题
此文章仅作为自己学习过程中的记录和总结,同时会有意地去用英文来做笔记,一些术语的英译不太准确,内容如有错漏也请多指教,谢谢! 一.概述 获取单链表的有效元素个数[新浪面试题1] 获取单链表倒数第k个结 ...
- 【数据结构与算法】 01 链表 (单链表、双向链表、循环链表、块状链表、头结点、链表反转与排序、约瑟夫环问题)
一.线性表 1.1 概念与特点 1.2 线性表的存储结构 1.3 常见操作 1.4 应用场景 二.链表 2.1 链表简介 2.2 单向链表(单链表) 2.21 基本概念 2.22 单链表基本操作 2. ...
- 数据结构之——《单链表》
数据结构之--<单链表> 1.链表概念 2.链表分类 3.接口函数实现 1.链表概念 链表是一种物理存储结构上非连续,非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现. ...
- 数据结构精讲——单链表
新手必会数据结构精讲--单链表 链表的介绍 概念:链表是一种物理存储结构上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 . 实际中链表的结构非常多样,以下情况组合起来就 ...
- 数据结构5: 链表(单链表)的基本操作及C语言实现
逻辑结构上一个挨一个的数据,在实际存储时,并没有像顺序表那样也相互紧挨着.恰恰相反,数据随机分布在内存中的各个位置,这种存储结构称为线性表的链式存储. 由于分散存储,为了能够体现出数据元素之间的逻辑关 ...
- python数据结构基础(单链表,多链表,二叉树)
python数据结构基础(单链表,多链表,二叉树) 数据结构指数据对象中数据元素之间的关系 Python 给我们提供了很多现成的数据结构类型,这些系统自己定义好的,不需要我们自己去定义的数据结构叫做 ...
- 【数据结构|链表】单链表基本操作
文章目录 一.链表 二.链表分类 三.单链表基本操作 3.1 单链表存储结构Init 3.2 遍历链表visitlist函数 3.3 求表长length 3.4 查找listfind ...
最新文章
- Android中WIFI开发总结(一)
- IOS学习动画二之 Core Animation (3)
- (4.14)向上取整、向下取整、四舍五入取整的实例
- 新乡学院2019计算机报名,新乡学院2019年招生章程
- 当VS2005卸载不干净时
- cloudquery.php态势感知,CloudQuery v1.3.4 版本更新
- 单片机c语言论文参考文献,单片机应用程序论文,关于关于单片机应用编程的技巧相关参考文献资料-免费论文范文...
- 单片机c语言延时30s程序,单片机c语言中的精确延时程序
- 什么是HD , HDTV , BD(Blu-Ray) , HDDVD
- 火线零线接反等问题的分析(电工)
- Android EagleEye笔记
- 论文理解:“Designing and training of a dual CNN for image denoising“
- 前端Js获取本网IP和外网IP方法总汇
- GD32F330+DS18B20
- 我国近视人数已超6亿了,千万不要在黑暗的环境里看手机
- 【分享】解读时间同步(NTP网络授时服务器)的重要性
- mysql2008百度云_SQLServer数据库之SQL Server 2008R2 企业版 百度云下载地址
- 虚拟机VMware下安装RedHat Linux 9.0 图解
- re:Invent最重磅的演讲,AWS CEO透露了哪些关键信息?
- vue中使用element-tiptap