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实现检测服务器是否可以ping通的2种方法
Jan 01 Python
Python中输出ASCII大文字、艺术字、字符字小技巧
Apr 28 Python
Python使用redis pool的一种单例实现方式
Apr 16 Python
详解python 字符串和日期之间转换 StringAndDate
May 04 Python
python使用webdriver爬取微信公众号
Aug 31 Python
python+splinter自动刷新抢票功能
Sep 25 Python
python得到电脑的开机时间方法
Oct 15 Python
Django RBAC权限管理设计过程详解
Aug 06 Python
python的time模块和datetime模块实例解析
Nov 29 Python
无惧面试,带你搞懂python 装饰器
Aug 17 Python
10张动图学会python循环与递归问题
Feb 06 Python
Pytorch GPU内存占用很高,但是利用率很低如何解决
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基础知识:控制结构
2006/12/13 PHP
比较简单的百度网盘文件直链PHP代码
2013/03/24 PHP
php中autoload的用法总结
2013/11/08 PHP
php中使用array_filter()函数过滤空数组的实现代码
2014/08/19 PHP
PHP面向对象继承用法详解(优化与减少代码重复)
2016/12/02 PHP
thinkPHP中U方法加密传递参数功能示例
2018/05/29 PHP
Js实现动态添加删除Table行示例
2014/04/14 Javascript
原生js实现移动端触摸轮播的示例代码
2017/12/22 Javascript
Element-ui自定义table表头、修改列标题样式、添加tooltip、:render-header使用
2019/04/11 Javascript
使用 vue 实例更好的监听事件及vue实例的方法
2019/04/22 Javascript
vue 中 elment-ui table合并上下两行相同数据单元格
2019/12/26 Javascript
vue 路由懒加载中给 Webpack Chunks 命名的方法
2020/04/24 Javascript
基于python的汉字转GBK码实现代码
2012/02/19 Python
python逐行读取文件内容的三种方法
2014/01/20 Python
Python正则表达式分组概念与用法详解
2017/06/24 Python
Python3安装Scrapy的方法步骤
2017/11/23 Python
Windows环境下python环境安装使用图文教程
2018/03/13 Python
numpy中以文本的方式存储以及读取数据方法
2018/06/04 Python
python输入多行字符串的方法总结
2019/07/02 Python
python实现布隆过滤器及原理解析
2019/12/08 Python
python Matplotlib数据可视化(2):详解三大容器对象与常用设置
2020/09/30 Python
百思买美国官网:Best Buy
2016/07/28 全球购物
德国珠宝和手表在线商店:VALMANO
2019/03/24 全球购物
电子信息毕业生自荐信
2013/11/16 职场文书
幼儿园教师备课制度
2014/01/12 职场文书
餐饮业经理竞聘演讲稿
2014/01/14 职场文书
秋季运动会表扬稿
2014/01/16 职场文书
学校安全工作制度
2014/01/19 职场文书
党支部公开承诺书
2014/03/28 职场文书
单位活动策划方案
2014/08/17 职场文书
解除劳动关系协议书范文
2014/09/11 职场文书
2015年元旦主持词结束语
2014/12/14 职场文书
公务员个人年终总结
2015/02/12 职场文书
《社戏》教学反思
2016/02/22 职场文书
普希金的诗歌赏析(3首)
2019/08/20 职场文书
Python 语言实现六大查找算法
2021/06/30 Python