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 异常处理实例详解
Mar 12 Python
Python中实现字符串类型与字典类型相互转换的方法
Aug 18 Python
Python采用Django制作简易的知乎日报API
Aug 03 Python
Python文本相似性计算之编辑距离详解
Nov 28 Python
python使用logging模块发送邮件代码示例
Jan 18 Python
说说如何遍历Python列表的方法示例
Feb 11 Python
Python DataFrame一列拆成多列以及一行拆成多行
Aug 06 Python
python 模拟银行转账功能过程详解
Aug 06 Python
Python 类属性与实例属性,类对象与实例对象用法分析
Sep 20 Python
深入浅析Python 命令行模块 Click
Mar 11 Python
python实现图像全景拼接
Mar 27 Python
Python 解析库json及jsonpath pickle的实现
Aug 17 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
超神学院:鹤熙已踏入神圣领域,实力不比凯莎弱
2020/03/02 国漫
教你如何用php实现LOL数据远程获取
2014/06/10 PHP
php中$_GET与$_POST过滤sql注入的方法
2014/11/03 PHP
解读PHP的Yii框架中请求与响应的处理流程
2016/03/17 PHP
PHP实现基于状态的责任链审批模式详解
2019/05/31 PHP
如何做到打开一个页面,过几分钟自动转到另一页面
2007/04/20 Javascript
Javascript Object.extend
2010/05/18 Javascript
javascript基础知识大集锦(一) 推荐收藏
2011/01/13 Javascript
关于COOKIE个数与大小的问题
2011/01/17 Javascript
使用jQuery实现input数值增量和减量的方法
2015/01/24 Javascript
如何使用HTML5地理位置定位功能
2015/04/27 Javascript
深入理解js函数的作用域与this指向
2016/05/28 Javascript
详解JavaScript对象类型
2016/06/16 Javascript
基于canvas粒子系统的构建详解
2017/08/31 Javascript
用vue写一个仿简书的轮播图的示例代码
2018/03/13 Javascript
使用js实现将后台传入的json数据放在前台显示
2018/08/06 Javascript
js取小数点后两位四种方法
2019/01/18 Javascript
vue2.0+vue-router构建一个简单的列表页的示例代码
2019/02/13 Javascript
BootStrap表单验证中的非Submit类型按钮点击时触发验证的坑
2019/09/05 Javascript
微信小程序分包加载代码实现方法详解
2019/09/23 Javascript
Python使用requests及BeautifulSoup构建爬虫实例代码
2018/01/24 Python
numpy中的高维数组转置实例
2018/04/17 Python
Python rstrip()方法实例详解
2018/11/11 Python
Django中celery执行任务结果的保存方法
2019/07/12 Python
HTML5 Canvas 破碎重组的视频特效的示例代码
2019/09/24 HTML / CSS
HTML5实现视频弹幕功能
2019/08/09 HTML / CSS
校园歌手大赛策划书
2014/01/17 职场文书
2014年创先争优活动总结
2014/05/04 职场文书
七一建党日演讲稿
2014/09/05 职场文书
怎样写离婚协议书
2015/01/26 职场文书
项目技术负责人岗位职责
2015/04/13 职场文书
企业战略合作意向书
2015/05/08 职场文书
2016毕业实习单位评语大全
2015/12/01 职场文书
2019年浪漫婚礼证婚词
2019/06/27 职场文书
Nginx的反向代理实例详解
2021/03/31 Servers
SpringBoot+Vue+JWT的前后端分离登录认证详细步骤
2021/09/25 Java/Android