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  连接字符串(join %)
Sep 06 Python
python使用calendar输出指定年份全年日历的方法
Apr 04 Python
Python实现快速多线程ping的方法
Jul 15 Python
python 循环遍历字典元素的简单方法
Sep 11 Python
在Python中执行系统命令的方法示例详解
Sep 14 Python
python操作redis方法总结
Jun 06 Python
对Python 3.2 迭代器的next函数实例讲解
Oct 18 Python
Python3内置模块pprint让打印比print更美观详解
Jun 02 Python
Django 查询数据库并返回页面的例子
Aug 12 Python
python conda操作方法
Sep 11 Python
python绘制BA无标度网络示例代码
Nov 21 Python
如何利用Python matplotlib绘制雷达图
Dec 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
smarty+adodb+部分自定义类的php开发模式
2006/12/31 PHP
gd库图片下载类实现下载网页所有图片的php代码
2012/08/20 PHP
php简单实现MVC
2015/02/05 PHP
PHP错误机制知识汇总
2016/03/24 PHP
ThinkPHP实现图片上传操作的方法详解
2017/05/08 PHP
用 javascript 实现的点击复制代码
2007/03/24 Javascript
用jQuery实现检测浏览器及版本的脚本代码
2008/01/22 Javascript
让firefox支持IE的一些方法的javascript扩展函数代码
2010/01/02 Javascript
javascript 验证日期的函数
2010/03/18 Javascript
jQuery代码优化 选择符篇
2011/11/01 Javascript
Js的Array数组对象详解
2016/02/22 Javascript
Vue中添加过渡效果的方法
2017/03/16 Javascript
HTML5+Canvas调用手机拍照功能实现图片上传(上)
2017/04/21 Javascript
Nodejs进阶:express+session实现简易登录身份认证
2017/04/24 NodeJs
ES6正则的扩展实例详解
2017/04/25 Javascript
vue2.0 实现页面导航提示引导的方法
2018/03/13 Javascript
利用Angular2的Observables实现交互控制的方法
2018/12/27 Javascript
npm 常用命令详解(小结)
2019/01/17 Javascript
jQuery实现经典的网页3D轮播图封装功能【附源码下载】
2019/02/15 jQuery
微信小程序导入Vant报错VM292:1 thirdScriptError的解决方法
2019/08/01 Javascript
详解微信小程序开发之formId使用(模板消息)
2019/08/27 Javascript
layui 上传图片 返回图片地址的方法
2019/09/26 Javascript
JS获取一个字符串中指定字符串第n次出现的位置
2021/02/10 Javascript
python实现批量获取指定文件夹下的所有文件的厂商信息
2014/09/28 Python
python操作mysql中文显示乱码的解决方法
2014/10/11 Python
Python学习笔记之解析json的方法分析
2017/04/21 Python
Python3实现取图片中特定的像素替换指定的颜色示例
2019/01/24 Python
Python sorted对list和dict排序
2020/06/09 Python
美国乡村商店:Plow & Hearth
2016/09/12 全球购物
英国领先的在线药房:Pharmacy First
2017/09/10 全球购物
美国在线旅行社:Crystal Travel
2018/09/11 全球购物
英国领先的名牌服装折扣零售商:Brown Bag Clothing
2019/01/08 全球购物
行政助理求职自荐信
2013/10/26 职场文书
硅酸盐工业控制专业应届生求职信
2013/11/02 职场文书
五十岁生日宴会答谢词
2014/01/15 职场文书
精彩的英文自荐信
2014/01/30 职场文书