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的类变量和成员变量用法实例教程
Aug 25 Python
Python实现随机生成有效手机号码及身份证功能示例
Jun 05 Python
Python实现读写sqlite3数据库并将统计数据写入Excel的方法示例
Aug 07 Python
Python进阶之递归函数的用法及其示例
Jan 31 Python
对python中两种列表元素去重函数性能的比较方法
Jun 29 Python
numpy中loadtxt 的用法详解
Aug 03 Python
Python递归函数实例讲解
Feb 27 Python
python opencv 读取图片 返回图片某像素点的b,g,r值的实现方法
Jul 03 Python
使用OpenCV实现仿射变换—缩放功能
Aug 29 Python
pytorch 实现将自己的图片数据处理成可以训练的图片类型
Jan 08 Python
.img/.hdr格式转.nii格式的操作
Jul 01 Python
Python爬虫基础之简单说一下scrapy的框架结构
Jun 26 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脚本的10个技巧(3)
2006/10/09 PHP
PHP中simplexml_load_string函数使用说明
2011/01/01 PHP
用PHP的超级变量$_GET获取HTML表单(Form) 数据
2011/05/07 PHP
支持中文的php加密解密类代码
2011/11/27 PHP
PHP 年龄计算函数(精确到天)
2012/06/07 PHP
php中的静态变量的基本用法
2014/03/20 PHP
PHP常用技巧汇总
2016/03/04 PHP
PHP获取表单数据与HTML嵌入PHP脚本的实现
2017/02/09 PHP
jquery动画3.创建一个带遮罩效果的图片走廊
2012/08/24 Javascript
JavaScript中诡异的delete操作符
2015/03/12 Javascript
基于JavaScript实现购物网站商品放大镜效果
2016/09/06 Javascript
AngularJs中 ng-repeat指令中实现含有自定义指令的动态html的方法
2017/01/19 Javascript
vue父组件向子组件(props)传递数据的方法
2018/01/02 Javascript
bootstrap table合并行数据并居中对齐效果
2018/10/17 Javascript
element中Steps步骤条和Tabs标签页关联的解决
2020/12/08 Javascript
原生微信小程序开发中 redux 的使用详解
2021/02/18 Javascript
Python的类实例属性访问规则探讨
2015/01/30 Python
pandas将DataFrame的列变成行索引的方法
2018/04/10 Python
Python smtplib实现发送邮件功能
2018/05/22 Python
python 地图经纬度转换、纠偏的实例代码
2018/08/06 Python
python批量爬取下载抖音视频
2019/06/17 Python
Python+OpenCv制作证件图片生成器的操作方法
2019/08/21 Python
Python各种扩展名区别点整理
2020/02/27 Python
html5使用canvas绘制一张图片
2014/12/15 HTML / CSS
世界第一冲浪品牌:O’Neill
2016/08/30 全球购物
什么是lambda函数
2013/09/17 面试题
J2EE的优越性主要表现在哪些方面
2016/03/28 面试题
酒后驾车标语
2014/06/30 职场文书
班级出游活动计划书
2014/08/15 职场文书
黄石寨导游词
2015/02/05 职场文书
文艺节目主持词
2015/07/06 职场文书
结婚喜宴祝酒词
2015/08/10 职场文书
Canvas三种动态画圆实现方法说明(小结)
2021/04/16 Javascript
Python使用华为API为图像设置多个锚点标签
2022/04/12 Python
浅谈Redis的事件驱动模型
2022/05/30 Redis
SQL解决未能删除约束问题drop constraint
2022/05/30 SQL Server