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执行get提交的方法
Apr 29 Python
Python中防止sql注入的方法详解
Feb 25 Python
Python入门_浅谈for循环、while循环
May 16 Python
详解Python函数可变参数定义及其参数传递方式
Aug 02 Python
Flask和Django框架中自定义模型类的表名、父类相关问题分析
Jul 19 Python
python看某个模块的版本方法
Oct 16 Python
Python3 串口接收与发送16进制数据包的实例
Jun 12 Python
Python和Sublime整合过程图示
Dec 25 Python
Python实现链表反转的方法分析【迭代法与递归法】
Feb 22 Python
Pycharm生成可执行文件.exe的实现方法
Jun 02 Python
Python使用eval函数执行动态标表达式过程详解
Oct 17 Python
python如何发送带有附件、正文为HTML的邮件
Feb 27 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
利用 fsockopen() 函数开放端口扫描器的实例
2017/08/19 PHP
thinkPHP框架实现的短信接口验证码功能示例
2018/06/20 PHP
js玩一玩WSH吧
2007/02/23 Javascript
js直接编辑当前cookie的脚本
2008/09/14 Javascript
setInterval计时器不准的问题解决方法
2014/05/08 Javascript
JS中FRAME的操作问题实例分析
2014/10/21 Javascript
jQuery中width()方法用法实例
2014/12/24 Javascript
判断访客终端类型集锦
2015/06/05 Javascript
AngularJS入门教程之AngularJS 模板
2016/08/18 Javascript
Vuejs第一篇之入门教程详解(单向绑定、双向绑定、列表渲染、响应函数)
2016/09/09 Javascript
JS判断来路是否是百度等搜索索引进行弹窗或自动跳转的实现代码
2016/10/09 Javascript
正则表达式,替换所有HTML标签的简单实例
2016/11/28 Javascript
jQuery使用正则表达式替换dom元素标签用法示例
2017/01/16 Javascript
jQuery实现贪吃蛇小游戏(附源码下载)
2017/03/04 Javascript
详解Angular 4.x 动态创建组件
2017/04/25 Javascript
JS 实现banner图片轮播效果(鼠标事件)
2017/08/04 Javascript
js微信分享实现代码
2020/10/11 Javascript
详解JavaScript对数组操作(添加/删除/截取/排序/倒序)
2019/04/28 Javascript
js console.log打印对象时属性缺失的解决方法
2019/05/23 Javascript
jQuery实现视频展示效果
2020/05/30 jQuery
Vue触发input选取文件点击事件操作
2020/08/07 Javascript
vant-ui组件调用Dialog弹窗异步关闭操作
2020/11/04 Javascript
[01:24:34]2014 DOTA2华西杯精英邀请赛5 24 DK VS LGD
2014/05/25 DOTA
[01:29:42]Liquid vs VP Supermajor决赛 BO 第一场 6.10
2018/07/05 DOTA
python和bash统计CPU利用率的方法
2015/07/10 Python
python利用socketserver实现并发套接字功能
2018/01/26 Python
Python3如何在Windows和Linux上打包
2020/02/25 Python
TensorFlow2.X使用图片制作简单的数据集训练模型
2020/04/08 Python
JD Sports荷兰:英国领先的运动时尚零售商
2020/03/13 全球购物
化学教师自荐信范文
2013/12/28 职场文书
小学数学教学反思
2014/02/02 职场文书
药剂专业自荐书
2014/06/20 职场文书
影视广告专业求职信
2014/09/02 职场文书
给客户的检讨书
2014/12/21 职场文书
2014年加油站站长工作总结
2014/12/23 职场文书
2015年乡镇卫生院工作总结
2015/04/22 职场文书