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 24 Python
Python中list列表的一些进阶使用方法介绍
Aug 15 Python
Django admin美化插件suit使用示例
Dec 12 Python
Python运行不显示DOS窗口的解决方法
Oct 22 Python
python 判断参数为Nonetype类型或空的实例
Oct 30 Python
python requests post多层字典的方法
Dec 27 Python
Python中的枚举类型示例介绍
Jan 09 Python
使用Keras画神经网络准确性图教程
Jun 15 Python
Django创建一个后台的基本步骤记录
Oct 02 Python
Python通过format函数格式化显示值
Oct 17 Python
4款Python 类型检查工具,你选择哪个呢?
Oct 30 Python
pycharm最新激活码有效期至2100年(亲测可用)
Feb 05 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错误提示的关闭方法详解
2013/06/23 PHP
dedecms函数分享之获取某一栏目所有子栏目
2014/05/19 PHP
php模拟登陆的实现方法分析
2015/01/09 PHP
PHP等比例压缩图片的实例代码
2018/07/26 PHP
一个JavaScript继承的实现
2006/10/24 Javascript
jQuery中toggle()函数的使用实例
2015/04/17 Javascript
用JavaScript显示浏览器客户端信息的超相近教程
2015/06/18 Javascript
js正则表达式中exec用法实例
2015/07/23 Javascript
jQuery实现的图文高亮滚动切换特效实例
2015/08/10 Javascript
jQuery实现商品活动倒计时
2015/10/16 Javascript
微信小程序(应用号)开发新闻客户端实例
2016/10/24 Javascript
深入理解JavaScript中的预解析
2017/01/04 Javascript
express框架实现基于Websocket建立的简易聊天室
2017/08/10 Javascript
Vue 页面切换效果之 BubbleTransition(推荐)
2018/04/08 Javascript
详解在React.js中使用PureComponent的重要性和使用方式
2018/07/10 Javascript
微信小程序chooseImage的用法(从本地相册选择图片或使用相机拍照)
2018/08/22 Javascript
vue 实现在函数中触发路由跳转的示例
2018/09/01 Javascript
React优化子组件render的使用
2019/05/12 Javascript
vue指令做滚动加载和监听等
2019/05/26 Javascript
vue响应式更新机制及不使用框架实现简单的数据双向绑定问题
2019/06/27 Javascript
NodeJS http模块用法示例【创建web服务器/客户端】
2019/11/05 NodeJs
JavaScript实现轮播图特效
2020/04/10 Javascript
Python中DJANGO简单测试实例
2015/05/11 Python
使用Python的Tornado框架实现一个Web端图书展示页面
2016/07/11 Python
Python3.9.0 a1安装pygame出错解决全过程(小结)
2021/02/02 Python
selenium+python自动化78-autoit参数化与批量上传功能的实现
2021/03/04 Python
爱奇艺VIP会员:大剧抢先看
2018/07/11 全球购物
世界上最大的字体市场:MyFonts
2020/01/10 全球购物
华为菲律宾官方网站:HUAWEI Philippines
2021/02/23 全球购物
机房搬迁方案
2014/05/01 职场文书
公关活动策划方案
2014/05/25 职场文书
五四演讲稿范文
2014/09/03 职场文书
迎国庆演讲稿
2014/09/05 职场文书
PostgreSQL将数据加载到buffer cache中操作方法
2021/04/16 PostgreSQL
ant design charts 获取后端接口数据展示
2022/05/25 Javascript
JavaScript实现九宫格拖拽效果
2022/06/28 Javascript