python判断单向链表是否包括环,若包含则计算环入口的节点实例分析


Posted in Python onOctober 23, 2019

本文实例讲述了python判断单向链表是否包括环,若包含则计算环入口的节点。分享给大家供大家参考,具体如下:

关于数据结构相关的面试题,经常会问到链表中是否存在环结构的判断,下图就是存在环结构的链表。

python判断单向链表是否包括环,若包含则计算环入口的节点实例分析

那么如何判断链表中是否存在环呢,下面解法的思路是采用快慢指针:

两个指向头节点的指针,fast和slow,一起从头结点开始往后遍历,fast每次移动两个节点,slow每次移动一个节点,

这样,如果存在环结构,那么fast指针在不断绕环过程中,肯定会追上slow指针。

# -*- coding:utf-8 -*-
'''
Created on 2019年10月23日
@author: Administrator
'''
class Node(): #定义一个Node类,构造两个属性,一个是item节点值,一个是节点的下一个指向
  def __init__(self,item=None):
    self.item = item
    self.next = None
def findbeginofloop(head):#判断是否为环结构并且查找环结构的入口节点
  slowPtr = head     #将头节点赋予slowPtr
  fastPtr = head     #将头节点赋予fastPtr
  loopExist =False    #默认环不存在,为False
  if head == None:    #如果头节点就是空的,那肯定就不存在环结构
    return False
  while fastPtr.next != None and fastPtr.next.next != None:   #fastPtr的下一个节点和下下个节点都不为空
    slowPtr = slowPtr.next      #slowPtr每次移动一个节点
    fastPtr = fastPtr.next.next   #fastPtr每次移动两个节点 
    if slowPtr == fastPtr :     #当fastPtr和slowPtr的节点相同时,也就是两个指针相遇了
      loopExist = True
      print("存在环结构")
      break
  if loopExist == True:
    slowPtr = head
    while slowPtr != fastPtr:
      fastPtr = fastPtr.next
      slowPtr = slowPtr.next
    return slowPtr
  print("不是环结构")
  return False
if __name__ == "__main__":
  node1 = Node(1)
  node2 = Node(2)
  node3 = Node(3)
  node4 = Node(4)
  node5 = Node(5)
  node1.next = node2
  node2.next = node3
  node3.next = node4
  node4.next = node5
  node5.next = node2
  print(findbeginofloop(node1).item)

运行结果:

存在环结构
2

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python使用matplotlib绘制柱状图教程
Feb 08 Python
Python+matplotlib实现华丽的文本框演示代码
Jan 22 Python
python编写弹球游戏的实现代码
Mar 12 Python
Python使用matplotlib模块绘制图像并设置标题与坐标轴等信息示例
May 04 Python
python 利用栈和队列模拟递归的过程
May 29 Python
解决PyCharm的Python.exe已经停止工作的问题
Nov 29 Python
Python设计模式之桥接模式原理与用法实例分析
Jan 10 Python
Python for循环与getitem的关系详解
Jan 02 Python
pytorch-神经网络拟合曲线实例
Jan 15 Python
Pytorch环境搭建与基本语法
Jun 03 Python
Python爬虫过程解析之多线程获取小米应用商店数据
Nov 14 Python
Python使用Web框架Flask开发项目
Jun 01 Python
Pandas DataFrame中的tuple元素遍历的实现
Oct 23 #Python
10行Python代码计算汽车数量的实现方法
Oct 23 #Python
在OpenCV里使用特征匹配和单映射变换的代码详解
Oct 23 #Python
手把手教你Python yLab的绘制折线图的画法
Oct 23 #Python
Python之Numpy的超实用基础详细教程
Oct 23 #Python
Python从列表推导到zip()函数的5种技巧总结
Oct 23 #Python
Python箱型图绘制与特征值获取过程解析
Oct 22 #Python
You might like
php 智能404跳转代码,适合换域名没改变目录的网站
2010/06/04 PHP
晋城吧对DiscuzX进行的前端优化要点
2010/09/05 PHP
《PHP编程最快明白》第五讲:php目录、文件操作
2010/11/01 PHP
php 数组的一个悲剧?
2011/05/11 PHP
PHP判断一个数组是另一个数组子集的方法详解
2017/07/31 PHP
thinkphp5.0整合phpsocketio完整攻略(绕坑)
2018/10/12 PHP
JS应用之禁止抓屏、复制、打印
2008/02/21 Javascript
jquery $.ajax各个事件执行顺序
2010/10/15 Javascript
jquery ui dialog ie8出现滚动条的解决方法
2010/12/06 Javascript
JS注册/移除事件处理程序(ExtJS应用程序设计实战)
2013/05/07 Javascript
jQuery 追加元素的方法如append、prepend、before
2014/01/16 Javascript
JS获取网页属性包括宽、高等等
2014/04/03 Javascript
jQuery将所有被选中的checkbox某个属性值连接成字符串的方法
2015/01/24 Javascript
WEB前端开发都应知道的jquery小技巧及jquery三个简写
2015/11/15 Javascript
分享javascript、jquery实用代码段
2016/10/20 Javascript
javascript 实现文本使用省略号替代(超出固定高度的情况)
2017/02/21 Javascript
vue项目tween方法实现返回顶部的示例代码
2018/03/02 Javascript
如何获取TypeScript的声明文件.d.ts
2018/05/01 Javascript
jQuery超简单遮罩层实现方法示例
2018/09/06 jQuery
vue项目实现图片上传功能
2019/12/23 Javascript
Jquery Datatables的使用详解
2020/01/30 jQuery
linux系统使用python监测网络接口获取网络的输入输出
2014/01/15 Python
python3.6+selenium实现操作Frame中的页面元素
2019/07/16 Python
Python时间序列缺失值的处理方法(日期缺失填充)
2019/08/11 Python
深度学习入门之Pytorch 数据增强的实现
2020/02/26 Python
一道SQL存储过程面试题
2016/10/07 面试题
个人党性剖析材料
2014/02/03 职场文书
竞选部门副经理的自荐书范文
2014/02/11 职场文书
大学生自我鉴定书
2014/03/24 职场文书
个人授权委托书格式
2014/08/30 职场文书
领导班子四风对照检查材料范文
2014/09/27 职场文书
接待员岗位职责范本
2015/04/15 职场文书
活动新闻稿范文
2015/07/17 职场文书
新闻稿件写作技巧
2015/07/18 职场文书
html+css合并表格边框的示例代码
2021/03/31 HTML / CSS
Spring中的@Transactional的工作原理
2022/06/05 Java/Android