题目描述:

给你一个链表的头节点 head ,判断链表中是否有环。

如果链表中存在环 ,则返回 true 。 否则,返回 false 。

方法一:hash表

hashset是一种特殊的hashmap,可以理解为只有key的map。python语言的set(集合)自带去重功能(集合元素的唯一性)。

# 哈希表 O(m+n)
class Solution:def hasCycle(self, head: ListNode) -> bool:if head == None:return Falsep = headhash_map = set()while p.next != None:if p in hash_map:return Truehash_map.add(p)p = p.nextreturn False

当然,也可以使用hashmap实现,如,dict的key是链表的值,dict的value是链表指向的地址,如果值相等,就判断地址是否相等,都相等才意味着出现了环。

优化:

class Solution:def hasCycle(self, head: ListNode) -> bool:seen = set()while head:if head in seen:return Trueseen.add(head)head = head.nextreturn False

官方的解法中不需要判断链表为空表的情况。

方法二:弗洛伊德解法(快慢指针)

如果有环,一但快慢指针入环,就一定会相遇。反过来说,相遇则一定有环。

# 快慢指针
class Solution:def hasCycle(self, head: ListNode) -> bool:if head == None:return FalseslowP = headfastP = head# 考虑终止条件:# 无环终止条件(正常终止条件)只需要考虑速度更快的快指针:当快指针只剩下一个或两个结点可以遍历时,就不需要再进行循环了——因为这显然无环了# 有环终止条件放在了if判断里while fastP.next != None and fastP.next.next != None:slowP = slowP.nextfastP = fastP.next.nextif slowP == fastP:return Truereturn False

最后,分享一下leetcode里评论最多的有趣方法:

这就叫——一路腥风血雨,直取上将人头!

算法练习——判断链表是否有环 leetcode.141 python相关推荐

  1. 【刷算法】判断链表是否有环以及返回入环节点

    题目描述 判断一个单链表是否有环,有环则返回入环节点,否则返回null 1->2->3->4->5->6↑ ↓8<-7 复制代码 例如上面这个链表就有环,入环节点是 ...

  2. 双指针算法之快慢指针(一):力扣【判断链表是否有环】leetcode-141、142

    一.简介:什么是快慢指针? 快慢指针,顾名思义,无非就是设置一个快指针,一个慢指针,初始化的时候,快指针和慢指针都指向链表的头结点,前进的时候一个在前一个在后,结合起来可以十分巧妙的解决链表中的一些问 ...

  3. 数据结构---判断链表是否有环

    判断链表是否有环 判断链表是否有环 方法1 方法2 JAVA实现 问题扩展1 问题扩展2 判断链表是否有环 有一个单向链表,链表中有可能出现"环",就像下图这样.那么,如何用程序来 ...

  4. C程序:如何判断链表是否有环

    C程序:如何判断链表是否有环 这是个常见的面试题哦,总之我面试的时候遇到过, 当时没有答上来,回去后想出来下面的方法一,该法还有个附加优点,可以判断出链表在哪个地方形成环的(即如果想拆开这个环,从哪个 ...

  5. 使用快慢指针判断链表是否有环

    有时候在面试中可能会遇到叫我们判断链表中是否有环的问题,这个问题的解决方法也很多,这里我记录一下比较简单的使用快慢指针的方法: 使用快慢指针是指: 设置两个指针,一快一慢,快指的是每次移动两步,慢指针 ...

  6. 判断链表是否存在环(及其延伸)

    有一个单链表,其中可能有一个环,也就是某个节点的next指向的是链表中在它之前的节点,这样在链表的尾部形成一环. 问题: 1.如何判断一个链表是不是这类链表? 2.如果链表为存在环,如果找到环的入口点 ...

  7. 剑指offer之判断链表是否包含环

    1 问题 判断链表是否包含环 2 思路 2个指针,一个指针走一步,一个指针走2步,如果相遇则有,反之无. 3 代码实现 #include <stdio.h> #include <st ...

  8. 数据结构:单链表操作之如何判断链表是否带环及相关操作

    //判断链表是否有环 int HasCircle(Node* pHead) { Node* low=pHead; Node* fast=pHead;     while(fast != NULL &a ...

  9. 面试题:判断链表是否存在环

    题目:判断链表是否存在环 思路:定义快慢指针,如果两个指针相遇则一定存在环. 1 public bool IsCircled(Node First) 2 { 3 if (First == null | ...

最新文章

  1. pix怎么抚养另一只猫_在工作和抚养两个孩子的同时,我如何在一年内获得第二学位并获得了5个开发人员认证...
  2. 【python之旅】python的基础二
  3. rpmbuile 制作drbd RPM包
  4. macos mysql 阿帕奇_Mac配置apache,mysql
  5. 部分转 Java读取ini配置
  6. 分布式 集群 负载均衡含义
  7. 30天自制操作系统 pdf_30天自制操作系统-汇编实现初版镜像
  8. jstree取消勾选_zTree 节点勾选取消勾选 选中取消选中
  9. 前端大神司徒正美突发病逝,再度思考健康与金钱
  10. 让画面契合音乐节拍——BeatEdit
  11. 人工智能标记语言AIML聊天机器人:产生、种类、应用、实例、AIML概述、知识库、公司、业界(20k字经典收藏版)
  12. vue 项目 跨域问题
  13. Ninth season eighth episode,Rachel‘s another sister,how is she???
  14. DIrectX错误,提示显卡驱动更新
  15. tomcat 服务器无响应,关于tomcat:数据库连接池连接耗尽导致tomcat请求无响应呈现出假死状态...
  16. 微积分入门(持续更新)
  17. YDOOK:Pytorch教程:转置矩阵 转置张量 T
  18. html5网页中用video标签无法播放MP4视频的解决方法
  19. DevExpress控件汉化类 z
  20. 如何打开pkl文件,pkl是什么类型的文件?

热门文章

  1. ubuntu系统下C语言编写简单程序
  2. av_interleaved_write_frame错误 Invalid data found when processing input
  3. 华为H3C配置单臂路由、静态默认浮动路由的配置方法
  4. 第五人格调香师技能可以用几次?
  5. 金融界的万骗之祖-庞氏骗局
  6. 深度学习 (五)cbow、skip-gram of word2vec
  7. 指针里的*符号是要靠近变量类型还是要靠近变量名称?
  8. 鸿蒙和ios流畅对比,鸿蒙OS对比iOS,华为再次“超越”,流畅度大幅领先苹果!...
  9. 初中数学结合计算机教学设计,初中数学课教学设计与信息技术的有效整合-精选教育文档...
  10. CSS3动画效果-animate.css