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爬虫之爬虫的定义及URL构成
Nov 04 Python
python实现根据ip地址反向查找主机名称的方法
Apr 29 Python
python实现类的静态变量用法实例
May 08 Python
Python和JavaScript间代码转换的4个工具
Feb 22 Python
requests和lxml实现爬虫的方法
Jun 11 Python
NetworkX之Prim算法(实例讲解)
Dec 22 Python
python的concat等多种用法详解
Nov 28 Python
详解Python的循环结构知识点
May 20 Python
Jupyter notebook如何修改平台字体
May 13 Python
Python 3.10 的首个 PEP 诞生,内置类型 zip() 迎来新特性(推荐)
Jul 03 Python
python pandas dataframe 去重函数的具体使用
Jul 20 Python
Python文件操作及内置函数flush原理解析
Oct 13 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 操作excel文件的方法小结
2009/12/31 PHP
第三章 php操作符与控制结构代码
2011/12/30 PHP
php readfile下载大文件失败的解决方法
2017/05/22 PHP
表单填写时用回车代替TAB的实现方法
2007/10/09 Javascript
Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式
2010/06/28 Javascript
Jquery中Ajax 缓存带来的影响的解决方法
2011/05/19 Javascript
JavaScript高级程序设计阅读笔记(六) ECMAScript中的运算符(二)
2012/02/27 Javascript
javascript实现存储hmtl字符串示例
2014/04/25 Javascript
noty ? jQuery通知插件全面解析
2016/05/18 Javascript
详解使用angular-cli发布i18n多国语言Angular应用
2017/05/20 Javascript
JavaScript实现body内任意节点的自定义属性功能示例
2017/09/18 Javascript
解决循环中setTimeout执行顺序的问题
2018/06/20 Javascript
element-ui循环显示radio控件信息的方法
2018/08/24 Javascript
JQueryDOM之样式操作
2019/03/27 jQuery
Vue项目中配置pug解析支持
2019/05/10 Javascript
vue路由拦截器和请求拦截器知识点总结
2019/11/08 Javascript
VSCode 添加自定义注释的方法(附带红色警戒经典注释风格)
2020/08/27 Javascript
python判断端口是否打开的实现代码
2013/02/10 Python
Python Queue模块详解
2014/11/30 Python
Python Web框架Flask信号机制(signals)介绍
2015/01/01 Python
Apache如何部署django项目
2017/05/21 Python
Python 获得13位unix时间戳的方法
2017/10/20 Python
对Python中的@classmethod用法详解
2018/04/21 Python
python实现批量注册网站用户的示例
2019/02/22 Python
Python中的asyncio代码详解
2019/06/10 Python
Django 自定义权限管理系统详解(通过中间件认证)
2020/03/11 Python
pytorch __init__、forward与__call__的用法小结
2021/02/27 Python
python在协程中增加任务实例操作
2021/02/28 Python
会计与审计毕业生自荐信范文
2013/12/30 职场文书
我未来的职业规划范文
2014/01/11 职场文书
2014年高中生自我评价范文
2014/09/26 职场文书
单身申明具结书
2015/02/26 职场文书
高中英语教学反思范文
2016/03/02 职场文书
《分一些蚊子进来》读后感3篇
2020/01/09 职场文书
使用pandas或numpy处理数据中的空值(np.isnan()/pd.isnull())
2021/05/14 Python
详解Redis瘦身指南
2021/05/26 Redis