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

单链表之快慢指针

单链表的快慢指针简介

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

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

  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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/469579.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言产随机数

#include "stdio.h" #include "stdlib.h" #include "time.h"void main(void) {int i;srand((unsigned)time(NULL));while(1){irand()%100;printf("%d\n",i);} }

【Pytorch神经网络基础理论篇】 04 线性代数

同学你好!本文章于2021年末编写,已与实际存在较大的偏差! 故在2022年末对本系列进行填充与更新,欢迎大家订阅最新的专栏,获取基于Pytorch1.10版本的理论代码(2023版)实现, Pytorch深度学习理论篇(2023版)…

Bootstrap实现弹出框和提示框效果代码

一、Bootstrap弹出框使用过JQuery UI应该知道,它里面有一个dialog的弹出框组件,功能也很丰富。与jQuery UI的dialog类似,Bootstrap里面也内置了弹出框组件。打开bootstrap 文档可以看到它的dialog是直接嵌入到bootstrap.js和bootstrap.css里面…

数据结构链表之循环链表——4

循环链表与约瑟夫问题 循环链表定义 定义:循环链表的定义十分简单,只需使一条单链表的尾部结点指向头结点,即可完成循环链表 循环链表的构建 class Node:def __init__(self, item):self.item itemself.next Nonefirst Node(aa) secon…

【Pytorch神经网络基础理论篇】 05 矩阵计算

同学你好!本文章于2021年末编写,已与实际存在较大的偏差! 故在2022年末对本系列进行填充与更新,欢迎大家订阅最新的专栏,获取基于Pytorch1.10版本的理论代码(2023版)实现, Pytorch深度学习理论篇(2023版)…

统计iOS项目的总代码行数的方法

1、打开终端, 2、用cd命令 定位到工程所在的目录,然后调用以下命名即可把每个源代码文件行数及总数统计出来: find . "(" -name "*.m" -or -name "*.mm" -or -name "*.cpp" -or -name "*.h&quo…

【Pytorch神经网络基础理论篇】 06 自动求导+导数与微分

同学你好!本文章于2021年末编写,已与实际存在较大的偏差! 故在2022年末对本系列进行填充与更新,欢迎大家订阅最新的专栏,获取基于Pytorch1.10版本的理论代码(2023版)实现, Pytorch深度学习理论篇(2023版)…

EXPORT_SYMBOL

linux2.6的“/prob/kallsyms”文件对应着内核符号表,记录了符号以及符号所在的内存地址。 模块可以使用如下宏导出符号到内核符号表: [c-sharp] view plaincopy EXPORT_SYMBOL(符号名); EXPORT_SYMBOL_GPL(符号名) 导出的符号可以被其他模块使用&…

数据结构链表之栈,Python3简单实现——5

数据结构链表之栈 栈的概述 定义:栈是一种基于先进后出(FILO)的数据结构,是一种只能在一段进行插入和删除操作的特殊线性表。引入名词:将数据存入栈的动作称为压栈,将数据取出栈的动作称为弹栈栈的特点:先进入栈的元…

【转】【Linux】linux awk命令详解

简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处…

8X25Q充电部分软件梳理(CP侧)

分享链接:http://note.youdao.com/share/?id4f6665eee6bad5ea27eee47f74bcfa4b&typenote 8X25Q充电部分软件梳理(CP侧) 作者:韦启发 目录 1、过放电池的充电阶段介绍... 2 2、Autonomous充电介绍... 5 3、USB充电器检测... 6…

【Pytorch神经网络基础理论篇】 08 Softmax 回归 + 损失函数 + 图片分类数据集

同学你好!本文章于2021年末编写,已与实际存在较大的偏差! 故在2022年末对本系列进行填充与更新,欢迎大家订阅最新的专栏,获取基于Pytorch1.10版本的理论代码(2023版)实现, Pytorch深度学习理论篇(2023版)…

CI Weekly #11 | 微服务场景下的自动化测试与持续部署

又一周过去了,最近我们的工程师正在搞一个“大事情” ——「flow.ci 配置文件」,稍微剧透一下,这个功能预计会在春节前上线。详情请大家关注 flow.ci Changelog 或其他官方通知:) 本期 CI Weekly 收录了的CI/CD实践、微服务自动化测试与持续部…

数据结构链表之栈——解决括号匹配问题和逆波兰表达式求值问题——6

括号匹配问题和逆波兰表达式求值问题 基于上一节已经使用python代码对栈进行了简单的实现,这一节我们在其基础上解决两个常见的问题 案例 括号匹配问题(点我直接到代码实现)逆波兰表达式求值问题(点我直接到代码实现) 括号匹配问题 在给定的字符串中&#xff0…

ubuntu server 12.04中文显示不完整

发现有台服务器ubuntu server 12.04在远程过去时文件名的中文现实没有问题,但ls的时候时间居然乱码。 搜索了一下,应该是locale的问题,可以这样处理: 1. 编辑/var/lib/locales/supported.d/local文件,内容改成如下&am…

Java_基础阶段笔记总结汇总

一、Java简介 1、Java语言平台性介绍 2、JDK_JRE_JVM的组成和作用 JVM: Java虚拟机,是专门用来运行Java程序的,但是不能单独安装 JRE: Java运行环境,包含JVM(Java虚拟机,是专门用来运行Java程序的)和核心类库 JDK: Java开发工具包,包含JRE和…

数据结构链表之队列,Python3实现——7

数据结构链表之队列 队列概述 定义:队列是一种基于先进先出(FIFO)的数据结构,队列只能在一段进行插入和删除操作的结构,第一个进入队列的元素在读取时会第一个被读取 队列可以使用顺序表(Python中列表)实现,也可以用链表实现&am…

IDEA上Debug调试全流程

一、什么是Debug模式 是供程序员使用的程序调试工具,它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调试程序。使用IDEA的断点调试功能,查看程序的运行过程 Debug调试窗口介绍。 二、Debug模式操作流程【应用】 能够使用断点调…

数据结构链表之符号表,Python3实现——8

数据结构链表之符号表 符号表的介绍 之前章节介绍的顺序表和链表都是一个节点储存一个元素的表,但在日常生活中我们还有很多一次需要储存成对或多个值的情况,例如: 符号表最主要的目的将一对元素,用一个键和一个值将其联系起来&…

OpenCV_01 简介+无版权安装+模块分析

OpenCV是应用广泛的开源图像处理库,我们以其为基础,介绍相关的图像处理方法:包括基本的图像处理方法:几何变换,形态学变换,图像平滑,直方图操作,模板匹配,霍夫变换等&…