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实现将元祖转换成数组的方法
May 04 Python
浅谈python抛出异常、自定义异常, 传递异常
Jun 20 Python
Python实现的爬虫功能代码
Jun 24 Python
在CentOS6上安装Python2.7的解决方法
Jan 09 Python
Python学生信息管理系统修改版
Mar 13 Python
用Python编写一个简单的CS架构后门的方法
Nov 20 Python
Python微医挂号网医生数据抓取
Jan 24 Python
把JSON数据格式转换为Python的类对象方法详解(两种方法)
Jun 04 Python
pytorch numpy list类型之间的相互转换实例
Aug 18 Python
浅析PEP570新语法: 只接受位置参数
Oct 15 Python
Python如何通过百度翻译API实现翻译功能
Apr 02 Python
python3中sys.argv的实例用法
Apr 24 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报错configure error Cannot find libmysqlclient under usr的解决方法
2014/06/27 PHP
thinkphp3.2.2前后台公用类架构问题分析
2014/11/25 PHP
深入解析PHP中foreach语句控制数组循环的用法
2015/11/30 PHP
php封装的验证码类分享
2017/02/26 PHP
实用的Jquery选项卡TAB示例代码
2013/08/28 Javascript
jQuery 事件的命名空间简单了解
2013/11/22 Javascript
js获取html页面节点方法(递归方式)
2013/12/13 Javascript
JS实现控制表格行内容垂直对齐的方法
2015/03/30 Javascript
Clipboard.js 无需Flash的JavaScript复制粘贴库
2015/10/02 Javascript
jQuery实现的文字逐行向上间歇滚动效果示例
2017/09/06 jQuery
vue自定义指令directive实例详解
2018/01/17 Javascript
vue插件开发之使用pdf.js实现手机端在线预览pdf文档的方法
2018/07/12 Javascript
swiper Scrollbar滚动条组件详解
2019/09/08 Javascript
Vue SPA 首屏优化方案
2021/02/26 Vue.js
[01:09]2014DOTA2国际邀请赛 TI4西雅图DOTA2 中国美女coser加油助威
2014/07/20 DOTA
python3.3使用tkinter开发猜数字游戏示例
2014/03/14 Python
基于Python中capitalize()与title()的区别详解
2017/12/09 Python
Python解决八皇后问题示例
2018/04/22 Python
python实现简单的单变量线性回归方法
2018/11/08 Python
Python tkinter实现图片标注功能(完整代码)
2019/12/08 Python
pytorch中tensor张量数据类型的转化方式
2019/12/31 Python
如何用python开发Zeroc Ice应用
2021/01/29 Python
HTML5 audio标签使用js进行播放控制实例
2015/04/24 HTML / CSS
美特斯邦威官方商城:邦购网
2016/10/13 全球购物
Marriott国际:万豪国际酒店查询预订
2017/09/25 全球购物
台湾全方位线上课程与职能学习平台:TibaMe
2019/12/04 全球购物
DeinDesign德国:设计自己的手机壳
2019/12/14 全球购物
副检察长四风问题对照检查材料思想汇报
2014/10/07 职场文书
2015年光棍节活动总结
2015/03/24 职场文书
装饰技术负责人岗位职责
2015/04/13 职场文书
2015年档案室工作总结
2015/05/23 职场文书
女性健康讲座主持词
2015/07/04 职场文书
学校学习型党组织建设心得体会
2019/06/21 职场文书
导游词之天津盘山
2019/11/01 职场文书
《中华上下五千年》读后感3篇
2019/11/29 职场文书
华为HarmonyOS3.0强在哪? 看看鸿蒙3.0这7个小功能
2023/01/09 数码科技