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 相关文章推荐
将Emacs打造成强大的Python代码编辑工具
Nov 20 Python
在Python程序和Flask框架中使用SQLAlchemy的教程
Jun 06 Python
理解生产者消费者模型及在Python编程中的运用实例
Jun 26 Python
用Python解决计数原理问题的方法
Aug 04 Python
Python面向对象之反射/自省机制实例分析
Aug 24 Python
Python3中在Anaconda环境下安装basemap包
Oct 21 Python
对pandas数据判断是否为NaN值的方法详解
Nov 06 Python
Python利用matplotlib做图中图及次坐标轴的实例
Jul 08 Python
Python学习笔记之集合的概念和简单使用示例
Aug 22 Python
Python IDLE或shell中切换路径的操作
Mar 09 Python
PyCharm2019 安装和配置教程详解附激活码
Jul 31 Python
Python Matplotlib绘图基础知识代码解析
Aug 31 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
攻克CakePHP系列二 表单数据显示
2008/10/22 PHP
php 过滤英文标点符号及过滤中文标点符号代码
2014/06/12 PHP
PHP改进计算字符串相似度的函数similar_text()、levenshtein()
2014/10/27 PHP
PHP的时间戳与具体时间转化的简单实现
2016/06/13 PHP
JS(jQuery)实现聊天接收到消息语言自动提醒功能详解【提示“您有新的消息请注意查收”】
2019/04/16 PHP
javascript里的条件判断
2007/02/27 Javascript
基于JQuery的Select选择框的华丽变身
2011/08/23 Javascript
$.get获取一个文件的内容示例代码
2013/09/11 Javascript
javascript中的变量作用域以及变量提升详细介绍
2013/10/24 Javascript
简单的Jquery全选功能
2013/11/07 Javascript
JavaScript数据结构和算法之图和图算法
2015/02/11 Javascript
JS+CSS实现简易实用的滑动门菜单效果
2015/09/18 Javascript
解决angular的post请求后SpringMVC后台接收不到参数值问题的方法
2015/12/10 Javascript
4种JavaScript实现简单tab选项卡切换的方法
2016/01/06 Javascript
angularJs关于指令的一些冷门属性详解
2016/10/24 Javascript
详解React中的组件通信问题
2017/07/31 Javascript
详解ES6之async+await 同步/异步方案
2017/09/19 Javascript
vue学习教程之带你一步步详细解析vue-cli
2017/12/26 Javascript
使用 Node.js 开发资讯爬虫流程
2018/01/07 Javascript
微信小程序表单验证form提交错误提示效果
2020/06/19 Javascript
Egg Vue SSR 服务端渲染数据请求与asyncData
2019/11/24 Javascript
Javascript摸拟自由落体与上抛运动原理与实现方法详解
2020/04/08 Javascript
Node.JS如何实现JWT原理
2020/09/18 Javascript
[59:44]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 paiN vs iG
2018/03/31 DOTA
[56:00]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第二场
2018/04/10 DOTA
Python简单调用MySQL存储过程并获得返回值的方法
2015/07/20 Python
Python 获取 datax 执行结果保存到数据库的方法
2019/07/11 Python
python里的单引号和双引号的有什么作用
2020/06/17 Python
联想墨西哥官方网站:Lenovo墨西哥
2016/08/17 全球购物
英国婴儿产品专家:Samuel Johnston
2020/04/20 全球购物
自我评价格式
2014/01/06 职场文书
党员2014两会学习心得体会
2014/03/17 职场文书
2014县政府领导班子三严三实对照检查材料思想汇报
2014/09/26 职场文书
2015年爱国卫生工作总结
2015/04/22 职场文书
餐馆开业致辞
2015/08/01 职场文书
Redis 的查询很快的原因解析及Redis 如何保证查询的高效
2022/03/16 Redis