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时间获取及转换知识汇总
Jan 11 Python
利用python获取当前日期前后N天或N月日期的方法示例
Jul 30 Python
win10下Python3.6安装、配置以及pip安装包教程
Oct 01 Python
Python读写docx文件的方法
May 08 Python
python3+selenium实现qq邮箱登陆并发送邮件功能
Jan 23 Python
python将类似json的数据存储到MySQL中的实例
Jul 12 Python
python3 requests库文件上传与下载实现详解
Aug 22 Python
face++与python实现人脸识别签到(考勤)功能
Aug 28 Python
python 实现提取log文件中的关键句子,并进行统计分析
Dec 24 Python
tensorboard显示空白的解决
Feb 15 Python
浅析Python模块之间的相互引用问题
Feb 26 Python
Python Pandas pandas.read_sql函数实例用法
Jun 21 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 array_slice函数的使用以及参数详解
2008/08/30 PHP
php libevent 功能与使用方法详解
2020/03/04 PHP
使弱类型的语言JavaScript变强势
2009/06/22 Javascript
JavaScript中几种常见排序算法小结
2011/02/22 Javascript
Javascript 正则表达式实现为数字添加千位分隔符
2015/03/10 Javascript
AngularJS 与Bootstrap实现表格分页实例代码
2016/10/14 Javascript
AngularJS实现动态编译添加到dom中的方法
2016/11/04 Javascript
js querySelector() 使用方法
2016/12/21 Javascript
两种简单的跨域方法(jsonp、php)
2017/01/02 Javascript
Three.js基础部分学习
2017/01/08 Javascript
javaScript基础详解
2017/01/19 Javascript
jQuery插件zTree实现的多选树效果示例
2017/03/08 Javascript
JS获取鼠标位置距浏览器窗口距离的方法示例
2017/04/11 Javascript
Webpack 之 babel-loader文件预处理器详解
2018/03/23 Javascript
对angular 监控数据模型变化的事件方法$watch详解
2018/10/09 Javascript
JavaScript常见事件处理程序实例总结
2019/01/05 Javascript
layui-table表复选框勾选的所有行数据获取的例子
2019/09/13 Javascript
vue各种事件监听实例(小结)
2020/06/24 Javascript
python获取文件版本信息、公司名和产品名的方法
2014/10/05 Python
Python实现PS滤镜的万花筒效果示例
2018/01/23 Python
Python决策树和随机森林算法实例详解
2018/01/30 Python
Python数据分析之获取双色球历史信息的方法示例
2018/02/03 Python
Python数据可视化库seaborn的使用总结
2019/01/15 Python
python基于itchat模块实现微信防撤回
2019/04/29 Python
French Connection官网:女装、男装及家居用品
2019/03/18 全球购物
Janie and Jack美国官网:GAP旗下的高档童装品牌
2019/09/09 全球购物
J2SDK1.5与J2SDK5.0有什么区别
2012/09/19 面试题
大学生自荐信
2013/12/11 职场文书
犯错检讨书
2014/02/21 职场文书
应届生求职自荐信
2014/07/04 职场文书
品牌转让协议书
2014/08/20 职场文书
学校做一个有道德的人活动方案
2014/08/23 职场文书
2014年保卫科工作总结
2014/12/05 职场文书
幼儿园新学期开学寄语
2015/05/27 职场文书
你会写报告?产品体验报告到底该怎么写?
2019/08/14 职场文书
SQL Server2019数据库之简单子查询的具有方法
2021/04/27 SQL Server