Leetcode--141. 环形链表
给定一个链表,判断链表中是否有环。
为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。
示例 1:
输入:head = [3,2,0,-4], pos = 1
输出:true
解释:链表中有一个环,其尾部连接到第二个节点。
示例 2:
输入:head = [1,2], pos = 0
输出:true
解释:链表中有一个环,其尾部连接到第一个节点。
示例 3:
输入:head = [1], pos = -1
输出:false
解释:链表中没有环。
进阶:
你能用 O(1)(即,常量)内存解决此问题吗?
思路:快慢指针法
两个指针从头开始遍历,快指针每次走两步,慢指针每次走两步
设慢指针走了n步,快指针就走了2n,每次的差距为n步,所以如果有环,快慢指针总会相遇
我们将慢指针的移动过程划分为两个阶段:非环部分与环形部分:
1. 慢指针在走完非环部分阶段后将进入环形部分:此时,快指针已经进入环中,非环部分长度=N
2. 两个指针都在环形区域中:考虑两个在环形赛道上的运动员 - 快跑者每次移动两步而慢跑者每次只移动一步。其速度的差值为 1
因此,在最糟糕的情形下,时间复杂度为 O(N+K),也就是 O(n)。
刚开始还考虑过会不会快的每次两步,如何跳过慢指针,后来仔细一想,发现不是这样的,因为慢指针也在移动
通俗点可以理解为他们的相对速度只差一个格子,快的只能一个一个格子的去追慢的,必然在一个格子相遇。
如果没看懂,看下面的详细。
一次跳2个与一次跳一个格子的追上之后,是一定会在一个格子遇到的。因为在即将追上的时候,快的那个落后慢的1个或者2个格子,无论哪种,落后1个的话,下一步正好追上,落后2个格子的话,下一步就落后1个格子了,也可以说即将追上的时候一定是相差1个格子,下一步一定在一个格子相遇。
提交的代码:
/**
* 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||head.next==null)
{
return false;
}
ListNode slow,fast;
slow = head;
fast = head.next;
while(slow!=fast)
{
if(fast.next==null||fast.next.next==null)
{
return false;
}
slow = slow.next;
fast = fast.next.next;
}
return true;
}
}
Leetcode--141. 环形链表相关推荐
- LeetCode 141. 环形链表 简单难度
** 141. 环形链表 ** 给定一个链表,判断链表中是否有环. 如果链表中存在环,则返回 true . 否则,返回 false . 解题思路(两种方法): 方法一:用集合set以及set.find ...
- LeetCode - 141. 环形链表
141. 环形链表 import java.util.Objects;class ListNode {int val;ListNode next;ListNode(int x) {val = x;ne ...
- LeetCode 141. 环形链表
原题链接 解题思路:快慢指针,如果快指针被慢指针追上一定是环形链表 /*** Definition for singly-linked list.* struct ListNode {* int va ...
- leetcode 141.环形链表 I - 142.环形链表 II 代码及指针相遇证明问题
⭐️ 环形链表 I 题目描述 给你一个链表的头节点 head ,判断链表中是否有环.如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环. 如果链表中存在环 ,则返回 tru ...
- Leetcode 141.环形链表
难度:简单 频率:155 题目: 给你一个链表的头节点head,判断链表中是否有环. 如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环.为了表示给定链表中的环,评测系统内部使 ...
- leetcode - 141. 环形链表(哈希表)
给定一个链表,判断链表中是否有环. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始). 如果 pos 是 -1,则在该链表中没有环. 示例 1: 输入: ...
- 32. Leetcode 141. 环形链表 (链表-双指针-环形链表)
给你一个链表的头节点 head ,判断链表中是否有环.如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环. 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表 ...
- Leetcode 141.环形链表 (每日一题 20210617)
给定一个链表,判断链表中是否有环.如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 ...
- [leetcode] 141.环形链表
给定一个链表,判断链表中是否有环. 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引 ...
- Leetcode 141. 环形链表 解题思路及C++实现
解题思路: 定义快慢两个指针,当指针所指节点是同一个时,说明出现了环. /*** Definition for singly-linked list.* struct ListNode {* int ...
最新文章
- IO多路复用的三种机制Select,Poll,Epoll
- 项目管理其实可以简单一点——任务分工
- EditText 输入类型 android:inputType=quot;参数类型quot;
- 前端学习(512):两列布局的第一种方式的优缺点
- 李国庆深夜发“15条真相”回应:关于原生家庭、同性恋、1.3亿...
- win7关机快捷键_win7电脑键盘关机的操作方法
- [转载] python怎么将十进制转换为二进制_python十进制和二进制的转换方法(含浮点数)
- Class.isAssignableFrom instanceof 区别
- python3 使用冒泡排序法原理解析,简单易懂
- Deep Learning for Image and Point Cloud Fusionin Autonomous Driving: A Review
- leapftp连接不上,为什么leapftp连接不上
- Algorithms-3.2 Binary Search Trees 二叉查找树
- Java - 批量生成二维码压缩包
- 2017年11月19日实验感想
- 读书百客:《十一月四日风雨大作》评赏
- 生物医学数据大爆炸,大数据“挖掘机”哪家强?
- 关于Vue和Yii的作者国籍
- BES(恒玄) 平台 复杂按键 实现
- 大数据导论三——大数据技术
- JS 键盘事件、触摸事件
热门文章
- 二叉排序树删除子节点以及遍历
- css3案例分析,CSS3动画/动画库以及案例分析(上)
- Linux系统服务器停服,Linux系统服务启动和停止
- java listview控件_ListView普通列表控件的使用
- 知识图谱入门视频(二)
- Spring Boot中使用Spring-data-jpa让数据访问更简单、更优雅
- 从Java程序员进阶到架构师,6大核心技能要领详解
- 论文浅尝 - ISWC2020 | KnowlyBERT: 知识图谱结合语言模型补全图谱查询
- 使用numpy实现神经网络模块
- 2020国内互联网公司的开源项目及Github地址部分汇总