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之鸭子类和多态
Jun 13 Python
Python3 适合初学者学习的银行账户登录系统实例
Aug 08 Python
Python tkinter模块中类继承的三种方式分析
Aug 08 Python
使用Python从零开始撸一个区块链
Mar 14 Python
使用sklearn之LabelEncoder将Label标准化的方法
Jul 11 Python
Python开发最牛逼的IDE——pycharm
Aug 01 Python
基于python实现的百度新歌榜、热歌榜下载器(附代码)
Aug 05 Python
Python3.7 读取音频根据文件名生成脚本的代码
Apr 07 Python
Python命名空间namespace及作用域原理解析
Jun 05 Python
如何把python项目部署到linux服务器
Aug 26 Python
Django 如何实现文件上传下载
Apr 08 Python
python 模拟在天空中放风筝的示例代码
Apr 21 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函数解决SQL injection
2006/10/09 PHP
也谈 PHP 和 MYSQL
2006/10/09 PHP
CodeIgniter框架中_remap()使用方法2例
2014/03/10 PHP
laravel 4安装及入门图文教程
2014/10/29 PHP
php实现计数器方法小结
2015/01/05 PHP
PHP6新特性分析
2016/03/03 PHP
PHP模板引擎Smarty内建函数section,sectionelse用法详解
2016/04/11 PHP
PHP实现的DES加密解密封装类完整实例
2017/04/29 PHP
点击下载链接 弹出页面实现代码
2009/10/01 Javascript
用jquery与css打造个性化的单选框和复选框
2010/10/20 Javascript
jquery实现相册一下滑动两次的方法
2015/02/09 Javascript
ajax图片上传,图片异步上传,更新实例
2016/12/30 Javascript
ajax异步请求详解
2017/01/06 Javascript
bootstrap datetimepicker 日期插件在火狐下出现一条报错信息的原因分析及解决办法
2017/03/08 Javascript
Node.js中看JavaScript的引用
2017/04/22 Javascript
js 只比较时间大小的实例
2017/10/26 Javascript
微信小程序有旋转动画效果的音乐组件实例代码
2018/08/22 Javascript
ios设备中angularjs无法改变页面title的解决方法
2018/09/13 Javascript
vue实现条件判断动态绑定样式的方法
2018/09/29 Javascript
bootstrap table.js动态填充单元格数据的多种方法
2019/07/18 Javascript
详解BootStrap表单验证中重置BootStrap-select验证提示不清除的坑
2019/09/17 Javascript
微信小程序实现文件预览
2020/10/22 Javascript
[50:34]VGJ.T vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[51:53]DOTA2-DPC中国联赛 正赛 RNG vs Dragon BO3 第二场 1月24日
2021/03/11 DOTA
python网络编程学习笔记(八):XML生成与解析(DOM、ElementTree)
2014/06/09 Python
利用Python爬取微博数据生成词云图片实例代码
2017/08/31 Python
pip安装py_zipkin时提示的SSL问题对应
2018/12/29 Python
python接口自动化如何封装获取常量的类
2019/12/24 Python
Pyinstaller加密打包应用的示例代码
2020/06/11 Python
用python实现一个简单计算器(完整DEMO)
2020/10/14 Python
Python 爬取淘宝商品信息栏目的实现
2021/02/06 Python
会展中心部门工作职责
2013/11/27 职场文书
质检部经理岗位职责
2014/02/19 职场文书
写一个Python脚本自动爬取Bilibili小视频
2021/04/24 Python
JavaScript实现栈结构详细过程
2021/12/06 Javascript
python自动化测试之Selenium详解
2022/03/13 Python