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 相关文章推荐
Pandas中把dataframe转成array的方法
Apr 13 Python
Tornado Web Server框架编写简易Python服务器
Jul 28 Python
Python 实现异步调用函数的示例讲解
Oct 14 Python
实例讲解Python3中abs()函数
Feb 19 Python
Python和Java的语法对比分析语法简洁上python的确完美胜出
May 10 Python
python操作kafka实践的示例代码
Jun 19 Python
python计算导数并绘图的实例
Feb 29 Python
Python爬取阿拉丁统计信息过程图解
May 12 Python
python爬取网易云音乐热歌榜实例代码
Aug 07 Python
python实现数据结构中双向循环链表操作的示例
Oct 09 Python
python 如何用terminal输入参数
May 25 Python
健身房被搭讪?用python写了个小米计时器助人为乐
Jun 08 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日历程序
2006/12/06 PHP
一步一步学习PHP(6) 面向对象
2010/02/16 PHP
ECSHOP完美解决Deprecated: preg_replace()报错的问题
2016/05/17 PHP
PHP+Mysql分布式事务与解决方案深入理解
2021/02/27 PHP
基于JQuery模仿苹果桌面的Dock效果(初级版)
2012/10/15 Javascript
JSON语法五大要素图文介绍
2012/12/04 Javascript
jquery 卷帘效果实现代码(不同方向)
2013/02/05 Javascript
jquery弹出框的用法示例(2)
2013/08/26 Javascript
javaScript 计算两个日期的天数相差(示例代码)
2013/12/27 Javascript
Jquery插件分享之气泡形提示控件grumble.js
2014/05/20 Javascript
node.js中的fs.read方法使用说明
2014/12/17 Javascript
jquery实现的3D旋转木马特效代码分享
2015/08/25 Javascript
javascript封装addLoadEvent实现页面同时加载执行多个函数的方法
2016/07/25 Javascript
AngularJS 支付倒计时功能实现思路
2017/06/05 Javascript
js实现控制文件拖拽并获取拖拽内容功能
2018/02/17 Javascript
Jquery让form表单异步提交代码实现
2019/11/14 jQuery
vue使用swiper.js重叠轮播组建样式
2019/11/14 Javascript
Vue实现base64编码图片间的切换功能
2019/12/04 Javascript
[01:52]深扒TI7聊天轮盘语音出处7
2017/05/11 DOTA
Python新手实现2048小游戏
2015/03/31 Python
Python中的字符串替换操作示例
2016/06/27 Python
python selenium 对浏览器标签页进行关闭和切换的方法
2018/05/21 Python
python实现websocket的客户端压力测试
2019/06/25 Python
django框架用户权限中的session缓存到redis中的方法
2019/08/06 Python
python openCV获取人脸部分并存储功能
2019/08/28 Python
宝拉珍选官方旗舰店:2%水杨酸精华液,收缩毛孔粗大和祛痘
2018/07/01 全球购物
维多利亚的秘密官方网站:Victoria’s Secret
2018/10/24 全球购物
《中华少年》教学反思
2014/02/15 职场文书
表彰会主持词
2014/03/26 职场文书
网站客服岗位职责
2014/04/05 职场文书
2015年教师工作总结范文
2015/03/31 职场文书
歌舞青春观后感
2015/06/10 职场文书
工作表现证明
2015/06/15 职场文书
高三物理教学反思
2016/02/20 职场文书
导游词之麻姑仙境
2019/11/18 职场文书
利用python做数据拟合详情
2021/11/17 Python