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学习之asyncore模块用法实例教程
Sep 29 Python
使用Python的PIL模块来进行图片对比
Feb 18 Python
Python 多线程实例详解
Mar 25 Python
Python通过OpenCV的findContours获取轮廓并切割实例
Jan 05 Python
python抓取网页中链接的静态图片
Jan 29 Python
python环境路径配置以及命令行运行脚本
Apr 02 Python
如何用Python做一个微信机器人自动拉群
Jul 03 Python
关于pycharm中pip版本10.0无法使用的解决办法
Oct 10 Python
Python Numpy中数据的常用保存与读取方法
Apr 01 Python
Pandas中DataFrame基本函数整理(小结)
Jul 20 Python
python 窃取摄像头照片的实现示例
Jan 08 Python
python opencv常用图形绘制方法(线段、矩形、圆形、椭圆、文本)
Apr 12 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分页示例代码
2007/03/19 PHP
在Windows下编译适用于PHP 5.2.12及5.2.13的eAccelerator.dll(附下载)
2010/05/04 PHP
PHP中each与list用法分析
2016/01/08 PHP
为何说PHP引用是个坑,要慎用
2018/04/02 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
2020/02/15 PHP
How to Auto Include a Javascript File
2007/02/02 Javascript
JavaScript 计算图片加载数量的代码
2011/01/01 Javascript
JavaScript中函数声明优先于变量声明的实例分析
2012/03/01 Javascript
浅析js封装和作用域
2013/07/09 Javascript
JS设置下拉列表框当前所选值的方法
2015/12/22 Javascript
jquery.cookie实现的客户端购物车操作实例
2015/12/24 Javascript
Jquery判断form表单数据是否变化
2016/03/30 Javascript
Javascript中的arguments对象
2016/06/20 Javascript
JS中的hasOwnProperty()和isPrototypeOf()属性实例详解
2016/08/11 Javascript
vue中将html字符串转换成html后遇到的问题小结
2018/12/10 Javascript
微信小程序tabBar设置实例解析
2019/11/14 Javascript
python执行等待程序直到第二天零点的方法
2015/04/23 Python
Python3实现购物车功能
2018/04/18 Python
Python装饰器模式定义与用法分析
2018/08/06 Python
Python合并同一个文件夹下所有PDF文件的方法
2019/03/11 Python
Python matplotlib画图与中文设置操作实例分析
2019/04/23 Python
Django框架模型简单介绍与使用分析
2019/07/18 Python
python编程进阶之异常处理用法实例分析
2020/02/21 Python
python画环形图的方法
2020/03/25 Python
python logging通过json文件配置的步骤
2020/04/27 Python
解决pytorch 交叉熵损失输出为负数的问题
2020/07/07 Python
Python开发入门——迭代的基本使用
2020/09/03 Python
如何用Python和JS实现的Web SSH工具
2021/02/23 Python
工作会议欢迎词
2014/01/16 职场文书
2014年五四青年节演讲比赛方案
2014/04/22 职场文书
中学生操行评语
2014/04/24 职场文书
幼儿园师德师风学习材料
2014/05/29 职场文书
集中采购方案
2014/06/10 职场文书
2014年高中教师工作总结
2014/12/19 职场文书
人身损害赔偿协议书
2016/03/22 职场文书
Spring中的使用@Async异步调用方法
2021/11/01 Java/Android