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下载文件时显示下载进度的方法
Apr 02 Python
在Python中使用模块的教程
Apr 27 Python
解决Linux系统中python matplotlib画图的中文显示问题
Jun 15 Python
PyTorch线性回归和逻辑回归实战示例
May 22 Python
python3解析库pyquery的深入讲解
Jun 26 Python
python游戏地图最短路径求解
Jan 16 Python
python 字典操作提取key,value的方法
Jun 26 Python
python读取并写入mat文件的方法
Jul 12 Python
Django ORM多对多查询方法(自定义第三张表&ManyToManyField)
Aug 09 Python
python调用接口的4种方式代码实例
Nov 19 Python
python 实现rolling和apply函数的向下取值操作
Jun 08 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
关于我转生变成史莱姆这档事:第二季PV上线,萌王2021年回归
2020/05/06 日漫
php下将多个数组合并成一个数组的方法与实例代码
2011/02/03 PHP
PHP之预定义接口详解
2015/07/29 PHP
PHP+apc+ajax实现的ajax_upload上传进度条代码
2016/01/25 PHP
JS模拟多线程
2007/02/07 Javascript
JS启动应用程序的一个简单例子
2008/05/11 Javascript
JavaScript排序算法之希尔排序的2个实例
2014/04/04 Javascript
JS获取客户端IP地址、MAC和主机名的7个方法汇总
2014/07/21 Javascript
讲解JavaScript中for...in语句的使用方法
2015/06/03 Javascript
javascript显示中文日期的方法
2015/06/18 Javascript
jQuery Mobile开发中日期插件Mobiscroll使用说明
2016/03/02 Javascript
javascript经典特效分享 手风琴、轮播图、图片滑动
2016/09/14 Javascript
ajax实现动态下拉框示例
2017/01/10 Javascript
JavaScript中利用for循环遍历数组
2017/01/15 Javascript
jQuery中map函数的两种方式
2017/04/07 jQuery
解决vue页面刷新或者后退参数丢失的问题
2018/03/13 Javascript
详解angular2如何手动点击特定元素上的点击事件
2018/10/16 Javascript
layui多图上传实现删除功能的例子
2019/09/23 Javascript
[38:42]完美世界DOTA2联赛循环赛 Matador vs Forest BO2第二场 11.05
2020/11/05 DOTA
Python操作MySQL简单实现方法
2015/01/26 Python
Python中使用第三方库xlrd来写入Excel文件示例
2015/04/05 Python
非递归的输出1-N的全排列实例(推荐)
2017/04/11 Python
Python简单实现控制电脑的方法
2018/01/22 Python
在Python中合并字典模块ChainMap的隐藏坑【推荐】
2019/06/27 Python
纯css3制作煽动翅膀的蝴蝶的示例
2018/04/23 HTML / CSS
标签和贴纸印刷:Lightning Labels
2018/03/22 全球购物
美国性感内衣店:Yandy
2018/06/12 全球购物
皮肤科医师岗位职责
2013/12/04 职场文书
学习十八大报告感言
2014/02/28 职场文书
大三学习计划书范文
2014/05/02 职场文书
产品销售计划书
2014/05/04 职场文书
学校师德师风整改措施
2014/10/27 职场文书
2015商场元旦促销活动策划方案
2014/12/09 职场文书
二年级上册数学教学计划
2015/01/20 职场文书
三好学生竞选稿范文
2019/08/21 职场文书
GO语言异常处理分析 err接口及defer延迟
2022/04/14 Golang