Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >LeetCode141题 环形链表(Linked List Cycle)

LeetCode141题 环形链表(Linked List Cycle)

作者头像
code随笔
发布于 2020-04-14 03:35:59
发布于 2020-04-14 03:35:59
29100
代码可运行
举报
文章被收录于专栏:code随笔的专栏code随笔的专栏
运行总次数:0
代码可运行

题目描述:

给定一个链表,判断链表中是否有环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。

Map集合解法

思路: 创建一个map集合,key为节点,value为地址值,因为ListNode没有重写toString()方法,所以用toString()方法返回的内容作为value。 如果map中存在当前节点的toString()方法返回的内容,则存在环。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * Definition for singly-linked list.
 * class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public boolean hasCycle(ListNode head) {
        if(head == null){
            return false;
        }
        Map<ListNode,String> map = new HashMap<ListNode,String>();
        while(head != null){
            if(map.containsValue(head.toString())){
                return true;
            }
            else{
                map.put(head,head.toString());
                head = head.next;
            }
        }
        return false;
    }
}

提交结果截图:

快慢指针解法

分析: 将slow指针指向head; 将fast指针指向head.next; 在循环的过程中slow走一步,fast走两步,如果存在环,则slow和fast一定会相遇,如本例子中:slow在1处,fast在2处;然后slow走一步,到2处,fast走两步,到4处;slow到3处,fast到3处,slow和fast相遇。 代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * Definition for singly-linked list.
 * class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public boolean hasCycle(ListNode head) {
        if(head == null)
            return false;
        ListNode slow = head;
        ListNode fast = head.next;
        while(fast != null){
            if(slow == fast){
                return true;
            }
            slow = slow.next;
            fast = fast.next;
            if(fast != null)
                fast = fast.next;
        }
        return false;
    }
}

对代码的解释: 1、如果head为空,则不是环,返回false; 2、如果fast不为空,则进入循环体;否则退出循环,无环,返回false; 3、如果slow和fast指向的节点相同,则存在环,返回true; 4、slow向后移动一个节点; 4、fast向后移动一个节点,如果fast不为空,再向后移动一个节点(不能直接移动两个节点,否则会报空指针异常);转2。 提交结果截图:

由图可知,快慢指针方法更好一些。

欢迎关注

长按下方二维码即可关注,微信公众号:code随笔

微信公众号:code随笔

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

本文分享自 code随笔 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
leetcode-141. 环形链表
利用快慢指针来判断链表是否含环的原理是:若链表存在环,那么快的指针一定在某时刻遇上慢指针。
灰太狼学Java
2022/06/17
1720
leetcode-141. 环形链表
LeetCode-142-环形链表2
为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。
benym
2022/07/14
1660
LeetCode142题 环形链表 II(Linked List Cycle II)
题目描述: 给定一个链表,返回链表开始入环的第一个节点。如果链表无环,则返回 null。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。 说明:不允许修改给定的链表。
code随笔
2020/04/14
2910
LeetCode142题 环形链表 II(Linked List Cycle II)
LeetCode 每日一题141: 环形链表
为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。
benny
2019/03/07
4450
LeetCode 每日一题141: 环形链表
LinkedList - 141. Linked List Cycle
Given a linked list, determine if it has a cycle in it.
ppxai
2020/09/23
3970
【一天一大 lee】环形链表II (难度:中等) - Day20201010
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。
前端小书童
2020/10/26
2800
【一天一大 lee】环形链表II (难度:中等) - Day20201010
141. 环形链表
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。
chuckQu
2022/08/19
2330
每天一道leetcode141-环形链表
题目 每天一道leetcode141-环形链表 分类:链表 中文链接: https://leetcode-cn.com/problems/linked-list-cycle/description/ 英文链接 https://leetcode.com/problems/linked-list-cycle/description/ 题目详述 给定一个链表,判断链表中是否有环。 进阶: 你能否不使用额外空间解决此题? 题目详解 思路 使用两个指针,一个快指针,一个慢指针; 快的每次走两步,慢的每次走一步
乔戈里
2019/09/17
2730
[第29期] 熟悉链表的几个经典题目- #141,#142, #19
昨天我们回顾了 链表的一些基础操作, 今天我们一起来看下几道链表的经典题目, 来巩固对链表的认识和理解。
皮小蛋
2020/03/02
3500
LeetCode-141-环形链表
为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。
benym
2022/07/14
1620
LeetCode | 141.环形链表
上面的题就是 环形链表 题目的截图,同时 LeetCode 给出了一个函数的定义,然后要求实现 环形链表 的函数体。函数定义如下:
码农UP2U
2020/08/26
3350
LeetCode | 141.环形链表
每天一道leetcode142-寻找链表中环的入口
题目 每天一道leetcode142-寻找链表中环的入口 分类:链表 中文链接: https://leetcode-cn.com/problems/linked-list-cycle-ii/ 英文链接 https://leetcode.com/problems/linked-list-cycle-ii/ 题目详述 给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 说明:不允许修改给定的链表。 进阶: 你是否可以不用额外空间解决此题? 题目详解 使用额外空间的思路 就是使
乔戈里
2019/09/17
5110
LinkedList - 142. Linked List Cycle II
Given a linked list, return the node where the cycle begins. If there is no cycle, return null.
ppxai
2020/09/23
4290
LinkedList - 142. Linked List Cycle II
算法:链表之环形链表
该类题目的核心点在于如何判断是环形链表,核心思想是:两个人在环上跑步,跑的快的早晚会追上跑的慢的。
灰子学技术
2020/07/29
3660
算法:链表之环形链表
leetcode-142. 环形链表 II
  根据题目要求,我们可以想到可以利用 set 不可重复的性质来完成这道题。定义一个 HashSet 集合且新建一个节点 cur 并让 cur 指向传进来链表的头节点 head,用 while 循环将链表上每一个点都逐一加入 set 中,只要不重复且不到链表尾部,都可以正常加入 set 中,若到了链表尾部都没有冲突出现,则证明这个链表不含环,若出现冲突,则说明含环,并返回起冲突的节点,此时这个节点就是环的第一个节点。
灰太狼学Java
2022/10/27
2050
leetcode-142. 环形链表 II
[Leetcode][python]Linked List Cycle/Linked List Cycle II/环形链表/环形链表 II
我们可以通过检查一个结点此前是否被访问过来判断链表是否为环形链表。常用的方法是使用哈希表。
蛮三刀酱
2019/03/26
6340
[Leetcode][python]Linked List Cycle/Linked List Cycle II/环形链表/环形链表 II
环形链表找入口,真的太妙了
链表是否有环问题看似简单,但实际处理上有很多需要注意的,这个问题是非常高频笔试面试题,记忆不牢固容易遗忘,可以认真看看学习一波!当然今天这两题对应力扣141和力扣142,有个小伙伴就在某手面试中遇到了。
bigsai
2021/06/25
1.7K0
环形链表找入口,真的太妙了
【Leetcode】141.环形链表
为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。
Leetcode名企之路
2019/08/28
4390
【Leetcode】141.环形链表
【python-leetcode141-快慢指针】环形链表
为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。
西西嘛呦
2020/08/26
3440
Linked List Cycle
问题:判断链表是否有环。 分析:利用快慢指针slow,fast          slow指针每次走一步,fast指针每次走两步,倘若存在环,则slow和fast必定在某一时刻相遇。          由于fast指针走的比slow快所以循环的时候只需要判断fast和fast->next不为空,判断fast->next是因为防止出现fast->NULL->next这种情况 /** * Definition for singly-linked list. * struct ListNode { *
用户1624346
2018/04/17
4930
相关推荐
leetcode-141. 环形链表
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验