python判断链表是否有环的实例代码


Posted in Python onJanuary 31, 2020

先看下实例代码:

class Node:
  def __init__(self,value=None):
    self.value = value
    self.next = None

class LinkList:
  def __init__(self,head = None):
    self.head = head

  def get_head_node(self):
    """
    获取头部节点
    """
    return self.head
    
  def append(self,value) :
    """
    从尾部添加元素
    """  
    node = Node(value = value) 
    cursor = self.head 
    if self.head is None:
      self.head = node
    else:  
      while cursor.next is not None:
        cursor = cursor.next
    
 
      cursor.next = node
      if value==4:
        node.next = self.head
  
  def traverse_list(self):
    head = self.get_head_node()
    cursor = head
    while cursor is not None:
      print(cursor.value)
      cursor = cursor.next
    print("traverse_over") 
    
  def hasCycle(self, head):
    """
    :type head: ListNode
    :rtype: bool
    """
    slow=fast=head
    while slow and fast and fast.next:
      slow = slow.next
      fast = fast.next.next
      if slow is fast:
        return True
    return False
  

  
def main():
  l = LinkList()
  l.append(1)
  l.append(2)
  l.append(3)
  l.append(4)
  head = l.get_head_node()
  print(l.hasCycle(head))
  #l.traverse_list()


if __name__ == "__main__":
  main()

知识点思考

判断一个单链表是否有环,

可以用 set 存放每一个 节点, 这样每次 访问后把节点丢到这个集合里面.

其实 可以遍历这个单链表, 访问过后,

如果这个节点 不在 set 里面, 把这个节点放入到 set 集合里面.

如果这个节点在 set 里面 , 说明曾经访问过, 所以这个链表有重新 走到了这个节点, 因此一定有环

如果链表都走完了, 把所有的节点都放完了. 还是没有重复的节点, 那说明没有环.

以上就是本次介绍的全部相关知识点内容,感谢大家的学习和对三水点靠木的支持。

Python 相关文章推荐
Python采用raw_input读取输入值的方法
Aug 18 Python
详解supervisor使用教程
Nov 21 Python
Python使用django框架实现多人在线匿名聊天的小程序
Nov 29 Python
Python构建网页爬虫原理分析
Dec 19 Python
Python cookbook(数据结构与算法)从序列中移除重复项且保持元素间顺序不变的方法
Mar 13 Python
Sanic框架流式传输操作示例
Jul 18 Python
transform python环境快速配置方法
Sep 27 Python
python 实现敏感词过滤的方法
Jan 21 Python
python中对数据进行各种排序的方法
Jul 02 Python
pycharm运行scrapy过程图解
Nov 22 Python
django数据模型on_delete, db_constraint的使用详解
Dec 24 Python
解决pip安装的第三方包在PyCharm无法导入的问题
Oct 15 Python
python爬取王者荣耀全皮肤的简单实现代码
Jan 31 #Python
Python进阶之迭代器与迭代器切片教程
Jan 29 #Python
Python列表list操作相关知识小结
Jan 29 #Python
给Python学习者的文件读写指南(含基础与进阶)
Jan 29 #Python
40个你可能不知道的Python技巧附代码
Jan 29 #Python
你可能不知道的Python 技巧小结
Jan 29 #Python
Python如何通过Flask-Mail发送电子邮件
Jan 29 #Python
You might like
PHP array_flip() 删除重复数组元素专用函数
2010/05/16 PHP
php的大小写敏感问题整理
2011/12/29 PHP
php带抄送和密件抄送的邮件发送方法
2015/03/20 PHP
wampserver改变默认网站目录的办法
2015/08/05 PHP
制作个性化的WordPress登陆界面的实例教程
2016/05/21 PHP
详解php命令注入攻击
2019/04/06 PHP
网页javascript精华代码集
2007/01/24 Javascript
Javascript技巧之不要用for in语句对数组进行遍历
2010/10/20 Javascript
如何使用jQUery获取选中radio对应的值(一句代码)
2013/06/03 Javascript
原生javascript模仿win8等待提示圆圈进度条
2014/04/24 Javascript
原生Ajax 和jQuery Ajax的区别示例分析
2014/12/17 Javascript
原生JS实现LOADING效果
2015/03/16 Javascript
[原创]JQuery 在表单提交之前修改 提交的值
2016/04/14 Javascript
H5用户注册表单页 注册模态框!
2016/09/17 Javascript
js浏览器html5表单验证
2016/10/17 Javascript
JavaScript排序算法动画演示效果的实现方法
2016/10/18 Javascript
JS数组返回去重后数据的方法解析
2017/01/03 Javascript
原生JS实现几个常用DOM操作API实例
2017/01/19 Javascript
Javascript实现信息滚动效果
2017/05/18 Javascript
利用angular、react和vue实现相同的面试题组件
2018/02/19 Javascript
vue源码中的检测方法的实现
2019/09/26 Javascript
vue学习笔记之过滤器的基本使用方法实例分析
2020/02/01 Javascript
[02:27]2014DOTA2国际邀请赛 VG赛后采访:更大的挑战在等着我们
2014/07/13 DOTA
Python连接SQLServer2000的方法详解
2017/04/19 Python
Python实现的文本编辑器功能示例
2017/06/30 Python
深入理解Python中的super()方法
2017/11/20 Python
通过python+selenium3实现浏览器刷简书文章阅读量
2017/12/26 Python
对Python 数组的切片操作详解
2018/07/02 Python
Python Collatz序列实现过程解析
2019/10/12 Python
django框架使用views.py的函数对表进行增删改查内容操作详解【models.py中表的创建、views.py中函数的使用,基于对象的跨表查询】
2019/12/12 Python
python GUI库图形界面开发之PyQt5单选按钮控件QRadioButton详细使用方法与实例
2020/02/28 Python
Python字符串及文本模式方法详解
2020/09/10 Python
Smallable意大利家庭概念店:设计师童装及家居装饰
2018/01/08 全球购物
大学生自我鉴定
2013/12/16 职场文书
对学校的意见和建议
2015/06/04 职场文书
Spring Data JPA框架的核心概念和Repository接口
2022/04/28 Java/Android