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 10 Python
Python快速排序算法实例分析
Nov 29 Python
python pandas 对时间序列文件处理的实例
Jun 22 Python
Django框架模板的使用方法示例
May 25 Python
bluepy 一款python封装的BLE利器简单介绍
Jun 25 Python
使用Filter过滤python中的日志输出的实现方法
Jul 17 Python
python Gunicorn服务器使用方法详解
Jul 22 Python
python requests更换代理适用于IP频率限制的方法
Aug 21 Python
python实现用类读取文件数据并计算矩形面积
Jan 18 Python
TensorFlow实现打印每一层的输出
Jan 21 Python
Pyspark读取parquet数据过程解析
Mar 27 Python
python os.rename实例用法详解
Dec 06 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
把1316这个数表示成两个数的和,其中一个为13的倍数,另一个是11的倍数,求这两个数。
2011/06/24 PHP
php数组函数序列之in_array() 查找数组值是否存在
2011/10/29 PHP
php打开本地exe程序,js打开本地exe应用程序,并传递相关参数方法
2018/02/06 PHP
JavaScript操作XML实例代码(获取新闻标题并分页,并分页)
2010/05/25 Javascript
javascript 三种方法实现获得和设置以及移除元素属性
2013/03/20 Javascript
JavaScript组件焦点与页内锚点间传值的方法
2015/02/02 Javascript
jQuery删除一个元素后淡出效果展示删除过程的方法
2015/03/18 Javascript
Js制作点击输入框时默认文字消失的效果
2015/09/05 Javascript
15位和18位身份证JS校验的简单实例
2016/07/18 Javascript
jQuery元素属性操作实例(设置、获取及删除元素属性)
2016/09/08 Javascript
Angular.js之作用域scope'@','=','&'实例详解
2017/02/28 Javascript
js实现QQ面板拖拽效果(慕课网DOM事件探秘)(全)
2017/09/19 Javascript
微信小程序实现topBar底部选择栏效果
2018/07/20 Javascript
nodejs npm错误Error:UNKNOWN:unknown error,mkdir 'D:\Develop\nodejs\node_global'at Error
2019/03/02 NodeJs
微信小程序跳转到其他网页(外部链接)的实现方法
2019/09/20 Javascript
在Vuex中Mutations修改状态操作
2020/07/24 Javascript
JavaScript前端开发时数值运算的小技巧
2020/07/28 Javascript
[53:13]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第三场 1月18日
2021/03/11 DOTA
python脚本实现分析dns日志并对受访域名排行
2014/09/18 Python
Python列表list数组array用法实例解析
2014/10/28 Python
python奇偶行分开存储实现代码
2018/03/19 Python
Python numpy 点数组去重的实例
2018/04/18 Python
python excel使用xlutils类库实现追加写功能的方法
2018/05/02 Python
Jupyter Notebook 文件默认目录的查看以及更改步骤
2020/04/14 Python
Python如何基于Tesseract实现识别文字功能
2020/06/05 Python
基于Python正确读取资源文件
2020/09/14 Python
Django restful framework生成API文档过程详解
2020/11/12 Python
CSS3中几个新增加的盒模型属性使用教程
2016/03/01 HTML / CSS
SmartBuyGlasses英国:购买太阳镜和眼镜
2018/01/29 全球购物
Timberland澳大利亚官网:全球领先的户外品牌
2019/12/10 全球购物
企业项目策划书
2014/01/11 职场文书
工地安全质量标语
2014/06/07 职场文书
优秀班集体申报材料
2014/12/25 职场文书
校园安全学习心得体会
2016/01/18 职场文书
python之基数排序的实现
2021/07/26 Python
redis数据结构之压缩列表
2022/03/21 Redis