Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >LeetCode,给定一个链表,判断链表中是否有环

LeetCode,给定一个链表,判断链表中是否有环

作者头像
微客鸟窝
发布于 2021-08-18 07:32:32
发布于 2021-08-18 07:32:32
66000
代码可运行
举报
文章被收录于专栏:Go语言指北Go语言指北
运行总次数:0
代码可运行

力扣题目:

给定一个链表,判断链表中是否有环。

如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。

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

  • 来源:力扣(LeetCode)
  • 链接:https://leetcode-cn.com/problems/linked-list-cycle

解题

1. 哈希表

我们最容易想到的方法就是使用一个哈希表来存储所有节点。遍历所有节点,判断当前节点有没有存在哈希表中,如果存在过说明该链表是环形链表,否则就将该节点加入哈希表中。重复这一过程,直到我们遍历完整个链表即可。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func hasCycle(head *ListNode) bool {
    maps := map[*ListNode]struct{}{}
    for head != nil {
        if _,ok := maps[head.Next]; ok {
            return true
        }else{
            maps[head.Next] = struct{}{}
        }
        head = head.Next
    }
    return false
}

2. 「Floyd 判圈算法」(又称龟兔赛跑算法)

我们还可以使用龟兔赛跑算法,即定义两个指针,一快一满。慢指针每次只移动一步,而快指针每次移动两步。初始时,慢指针在位置 head,而快指针在位置 head.next。这样一来,如果在移动的过程中,快指针反过来追上慢指针,就说明该链表为环形链表。否则快指针将到达链表尾部,该链表不为环形链表。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func hasCycle(head *ListNode) bool {
    if head == nil || head.Next == nil {
        return false
    }
    slow := head
    fast := head.Next
    for fast != slow {
        if fast == nil || fast.Next == nil {
            return false
        }
        slow = slow.Next
        fast = fast.Next.Next
    }
    return true
}

有什么问题,可以公众号内回复或加我微信交流。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微客鸟窝 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
LeetCode 141.环形链表 - JavaScript
Floyd 判圈算法类似龟兔赛跑,需要用到快指针 fast 和慢指针 slow。算法流程是:
心谭博客
2020/04/21
4320
每天一道leetcode141-环形链表
题目 每天一道leetcode141-环形链表 分类:链表 中文链接: https://leetcode-cn.com/problems/linked-list-cycle/description/ 英文链接 https://leetcode.com/problems/linked-list-cycle/description/ 题目详述 给定一个链表,判断链表中是否有环。 进阶: 你能否不使用额外空间解决此题? 题目详解 思路 使用两个指针,一个快指针,一个慢指针; 快的每次走两步,慢的每次走一步
乔戈里
2019/09/17
2690
【小Y学算法】⚡️每日LeetCode打卡⚡️——38.环形链表
如果链表中有某个节点,可以通过连续跟踪 next指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。
呆呆敲代码的小Y
2021/09/26
2910
【小Y学算法】⚡️每日LeetCode打卡⚡️——38.环形链表
LeetCode题解—链表中环的检测
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 pos为环的起点位置。
码上积木
2021/03/10
1.3K0
环形链表
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。
_kyle
2020/11/26
6030
环形链表
LeetCode笔记 | 链表(ing)
思路如下: 0.利用递归首先找到单链表的最后一个节点; 最后一个节点存储在re里面, re在找到最后一个节点时被赋值且其永远为最后一个节点的值,保持不变; 从找到最后一个节点开始, 从最后往前的方向,每一层递归反转一对节点 / 一个指向;
凌川江雪
2019/10/24
4720
LeetCode笔记 | 链表(ing)
单链表之环形链表
不论在面试或者刷题过程中,很大概率都会遇到环形链表这种类型的题目,例如 leetcode 141. 环形链表 以及 leetcode 142. 环形链表 II 等,本文主要介绍通过快慢指针法来解决此类题型,以供大家参考。
程序员小熊
2021/05/28
5140
单链表之环形链表
LeetCode之链表(10)
今天有点闲,就来连刷几道题,下次不这样干了,有点hold不住,建议以后保持平衡刷题规律!
公众号guangcity
2019/09/20
4040
LeetCode之链表(10)
算法:链表之环形链表
该类题目的核心点在于如何判断是环形链表,核心思想是:两个人在环上跑步,跑的快的早晚会追上跑的慢的。
灰子学技术
2020/07/29
3570
算法:链表之环形链表
LeetCode:环形链表_141
注意:是慢指针正常速度,快指针两倍速度。不是快指针正常速度,慢指针1/2速度。不然会超时
Yuyy
2022/06/28
2390
LeetCode:环形链表_141
用python 判断一个单链表是否有环.
https://leetcode.com/problems/linked-list-cycle/
py3study
2020/01/06
1.3K0
漫画:不一样的链表成环检测!
今天为大家带来,链表检测成环的经典题目。如果你觉得你会了,请你不妨耐心些认真看下去,我相信会有一些不一样的收获!
程序员小浩
2020/03/31
8530
Js算法与数据结构拾萃(3):链表
对于一个数组,想要做篡改是复杂度是非常高的,设想你接到一个需求,让你记录存储一个人的简历,你用数组储存,可能是这样的:
一粒小麦
2020/02/25
6410
LeetCode 141:环形链表 Linked List Cycle
为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。
爱写bug
2019/07/16
3940
LeetCode 142:环形链表 II Linked List Cycle II
为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。
爱写bug
2019/07/17
5250
《剑指offer》第22天:链表成环的新解法
思路:通过hash表来检测节点之前是否被访问过,来判断链表是否成环。这是最容易想到的一种题解了。过于简单,直接上代码,go:
程序员小浩
2020/09/14
4871
常见编程模式之快慢指针
快慢指针方法,又称为龟兔赛跑算法,其基本思想就是使用两个移动速度不同的指针在数组或链表等序列结构上移动。这种方法对于处理「环形」链表或数组非常有用。以链表为例,通过以不同的速度移动,我们可以证明如果链表中存在环,则两个指针必定会相遇,当两个指针均处在环中时,快指针会追上慢指针(如下图所示)。
口仆
2020/08/28
5.1K1
【每日leetcode】14.环形链表
链表中节点的数目范围是 [0, 104] -105 <= Node.val <= 105 pos 为 -1 或者链表中的一个 有效索引 。
一条coding
2021/08/12
3320
【每日leetcode】14.环形链表
【一天一大 lee】环形链表II (难度:中等) - Day20201010
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。
前端小书童
2020/10/26
2750
【一天一大 lee】环形链表II (难度:中等) - Day20201010
leetcode刷题(37)——141. 环形链表
为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。
老马的编程之旅
2022/06/22
2180
leetcode刷题(37)——141. 环形链表
相关推荐
LeetCode 141.环形链表 - JavaScript
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验