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 相关文章推荐
本地文件上传到七牛云服务器示例(七牛云存储)
Jan 11 Python
Win7下搭建python开发环境图文教程(安装Python、pip、解释器)
May 17 Python
Python使用修饰器执行函数的参数检查功能示例
Sep 26 Python
解决python3 urllib 链接中有中文的问题
Jul 16 Python
Python日期时间Time模块实例详解
Apr 15 Python
在python里面运用多继承方法详解
Jul 01 Python
简单了解Django应用app及分布式路由
Jul 24 Python
python时间日期操作方法实例小结
Feb 06 Python
Django 自定义权限管理系统详解(通过中间件认证)
Mar 11 Python
Python多线程threading创建及使用方法解析
Jun 17 Python
Python json解析库jsonpath原理及使用示例
Nov 25 Python
python实现双人五子棋(终端版)
Dec 30 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捕获Fatal error错误的方法
2014/06/11 PHP
PHP中file_get_contents高?用法实例
2014/09/24 PHP
php生成rss类用法实例
2015/04/14 PHP
JQuery AJAX实现目录浏览与编辑的代码
2008/10/21 Javascript
火狐浏览器(firefox)下获得Event对象以及keyCode
2008/11/13 Javascript
json 实例详细说明教程
2009/10/31 Javascript
jquery常用特效方法使用示例
2014/04/25 Javascript
JavaScript实现弹出模态窗体并接受传值的方法
2016/02/12 Javascript
javascript比较语义化版本号的实现代码
2016/09/09 Javascript
Angular2学习教程之TemplateRef和ViewContainerRef详解
2017/05/25 Javascript
利用js编写网页进度条效果
2017/10/08 Javascript
JS实现合并json对象的方法
2017/10/10 Javascript
AngularJs点击状态值改变背景色的实例
2017/12/18 Javascript
在vue中实现点击选择框阻止弹出层消失的方法
2018/09/15 Javascript
vue之封装多个组件调用同一接口的案例
2020/08/11 Javascript
Python备份Mysql脚本
2008/08/11 Python
Python中的rfind()方法使用详解
2015/05/19 Python
Python学习笔记整理3之输入输出、python eval函数
2015/12/14 Python
python实现协同过滤推荐算法完整代码示例
2017/12/15 Python
Python解析并读取PDF文件内容的方法
2018/05/08 Python
使用Python抓取豆瓣影评数据的方法
2018/10/17 Python
python合并已经存在的sheet数据到新sheet的方法
2018/12/11 Python
用python wxpy管理微信公众号并利用微信获取自己的开源数据
2019/07/30 Python
python GUI库图形界面开发之PyQt5输入对话框QInputDialog详细使用方法与实例
2020/02/27 Python
使用jupyter Nodebook查看函数或方法的参数以及使用情况
2020/04/14 Python
ITK 实现多张图像转成单个nii.gz或mha文件案例
2020/07/01 Python
Python字符串及文本模式方法详解
2020/09/10 Python
公司出纳岗位职责
2013/12/07 职场文书
上班迟到检讨书
2014/01/10 职场文书
2014党委书记四风问题对照检查材料思想汇报
2014/09/22 职场文书
2014年财政所工作总结
2014/11/22 职场文书
应急管理工作总结2015
2015/05/04 职场文书
2016开学第一课心得体会
2016/01/23 职场文书
初中数学教学反思范文
2016/02/17 职场文书
python中requests库+xpath+lxml简单使用
2021/04/29 Python
关于python pygame游戏进行声音添加的技巧
2021/10/24 Python