算法练习——判断链表是否有环 leetcode.141 python
题目描述:
给你一个链表的头节点 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相关推荐
- 【刷算法】判断链表是否有环以及返回入环节点
题目描述 判断一个单链表是否有环,有环则返回入环节点,否则返回null 1->2->3->4->5->6↑ ↓8<-7 复制代码 例如上面这个链表就有环,入环节点是 ...
- 双指针算法之快慢指针(一):力扣【判断链表是否有环】leetcode-141、142
一.简介:什么是快慢指针? 快慢指针,顾名思义,无非就是设置一个快指针,一个慢指针,初始化的时候,快指针和慢指针都指向链表的头结点,前进的时候一个在前一个在后,结合起来可以十分巧妙的解决链表中的一些问 ...
- 数据结构---判断链表是否有环
判断链表是否有环 判断链表是否有环 方法1 方法2 JAVA实现 问题扩展1 问题扩展2 判断链表是否有环 有一个单向链表,链表中有可能出现"环",就像下图这样.那么,如何用程序来 ...
- C程序:如何判断链表是否有环
C程序:如何判断链表是否有环 这是个常见的面试题哦,总之我面试的时候遇到过, 当时没有答上来,回去后想出来下面的方法一,该法还有个附加优点,可以判断出链表在哪个地方形成环的(即如果想拆开这个环,从哪个 ...
- 使用快慢指针判断链表是否有环
有时候在面试中可能会遇到叫我们判断链表中是否有环的问题,这个问题的解决方法也很多,这里我记录一下比较简单的使用快慢指针的方法: 使用快慢指针是指: 设置两个指针,一快一慢,快指的是每次移动两步,慢指针 ...
- 判断链表是否存在环(及其延伸)
有一个单链表,其中可能有一个环,也就是某个节点的next指向的是链表中在它之前的节点,这样在链表的尾部形成一环. 问题: 1.如何判断一个链表是不是这类链表? 2.如果链表为存在环,如果找到环的入口点 ...
- 剑指offer之判断链表是否包含环
1 问题 判断链表是否包含环 2 思路 2个指针,一个指针走一步,一个指针走2步,如果相遇则有,反之无. 3 代码实现 #include <stdio.h> #include <st ...
- 数据结构:单链表操作之如何判断链表是否带环及相关操作
//判断链表是否有环 int HasCircle(Node* pHead) { Node* low=pHead; Node* fast=pHead; while(fast != NULL &a ...
- 面试题:判断链表是否存在环
题目:判断链表是否存在环 思路:定义快慢指针,如果两个指针相遇则一定存在环. 1 public bool IsCircled(Node First) 2 { 3 if (First == null | ...
最新文章
- pix怎么抚养另一只猫_在工作和抚养两个孩子的同时,我如何在一年内获得第二学位并获得了5个开发人员认证...
- 【python之旅】python的基础二
- rpmbuile 制作drbd RPM包
- macos mysql 阿帕奇_Mac配置apache,mysql
- 部分转 Java读取ini配置
- 分布式 集群 负载均衡含义
- 30天自制操作系统 pdf_30天自制操作系统-汇编实现初版镜像
- jstree取消勾选_zTree 节点勾选取消勾选 选中取消选中
- 前端大神司徒正美突发病逝,再度思考健康与金钱
- 让画面契合音乐节拍——BeatEdit
- 人工智能标记语言AIML聊天机器人:产生、种类、应用、实例、AIML概述、知识库、公司、业界(20k字经典收藏版)
- vue 项目 跨域问题
- Ninth season eighth episode,Rachel‘s another sister,how is she???
- DIrectX错误,提示显卡驱动更新
- tomcat 服务器无响应,关于tomcat:数据库连接池连接耗尽导致tomcat请求无响应呈现出假死状态...
- 微积分入门(持续更新)
- YDOOK:Pytorch教程:转置矩阵 转置张量 T
- html5网页中用video标签无法播放MP4视频的解决方法
- DevExpress控件汉化类 z
- 如何打开pkl文件,pkl是什么类型的文件?
热门文章
- ubuntu系统下C语言编写简单程序
- av_interleaved_write_frame错误 Invalid data found when processing input
- 华为H3C配置单臂路由、静态默认浮动路由的配置方法
- 第五人格调香师技能可以用几次?
- 金融界的万骗之祖-庞氏骗局
- 深度学习 (五)cbow、skip-gram of word2vec
- 指针里的*符号是要靠近变量类型还是要靠近变量名称?
- 鸿蒙和ios流畅对比,鸿蒙OS对比iOS,华为再次“超越”,流畅度大幅领先苹果!...
- 初中数学结合计算机教学设计,初中数学课教学设计与信息技术的有效整合-精选教育文档...
- CSS3动画效果-animate.css