【leetcode】Linked List Cycle I II
Given a linked list, determine if it has a cycle in it.
Can you solve it without using extra space?
每个节点再开辟一个属性存放是否访问过,这样遍历一遍即可知道是否有环。
但为了不增加额外的空间,
可以设置两个指针,一个一次走一步,另一个一次走两步,如果有环则两个指针一定会再次相遇,反之则不会。
C++:
1 class Solution { 2 public: 3 bool hasCycle(ListNode *head) { 4 if(head==NULL||head->next==NULL) return 0; 5 6 ListNode *p=head; 7 ListNode *q=head; 8 int flag=0; 9 while(p->next) 10 { 11 if(p->next==q) 12 { 13 flag=1; 14 break; 15 } 16 p=p->next; 17 if(p->next==NULL) 18 break; 19 p=p->next; 20 q=q->next; 21 } 22 if(flag==1) 23 return 1; 24 else 25 return 0; 26 } 27 };
Python:
1 # Definition for singly-linked list. 2 # class ListNode: 3 # def __init__(self, x): 4 # self.val = x 5 # self.next = None 6 7 class Solution: 8 # @param head, a ListNode 9 # @return a boolean 10 def hasCycle(self, head): 11 if head is None: 12 return False 13 p1=head 14 p2=head 15 while True: 16 if p1.next is not None: 17 p1=p1.next.next 18 p2=p2.next 19 if p1 is None or p2 is None: 20 return False 21 elif p1==p2: 22 return True 23 else: 24 return False 25 return False
II:
Given a linked list, return the node where the cycle begins. If there is no cycle, return null
.
Follow up:
Can you solve it without using extra space?
当fast与slow相遇时,
slow肯定没有遍历完链表,而fast已经在环内循环了$n$圈($1 \leq n$)。假设slow走了$s$步,则fast走了$2s$步(fast步数还等于$s$加上在环上多转的$n$圈),设环长为$r$,则:
设整个链表长$L$,环入口点与相遇点距离为$a$,起点到环入口点的距离为$x$,则
$L – x – a$为相遇点到环入口点的距离,由此可知,从链表头到环入口点等于$n-1$圈内环+相遇点到环入口点,
于是我们可以从{head}开始另设一个指针{slow2},两个慢指针每次前进一步,它俩一定会在环入口点相遇。
分析来自 ACM之家。
1 class Solution { 2 public: 3 ListNode *detectCycle(ListNode *head) { 4 if(head==NULL||head->next==NULL) return NULL; 5 ListNode *p=head; 6 ListNode *q=head; 7 while(p->next&&p->next->next) 8 { 9 q=q->next; 10 p=p->next->next; 11 if(q==p) 12 { 13 q=head; 14 while(q!=p) 15 { 16 p=p->next; 17 q=q->next; 18 } 19 20 return q; 21 } 22 } 23 24 return NULL; 25 } 26 };
转载于:https://www.cnblogs.com/jawiezhu/p/4401072.html
【leetcode】Linked List Cycle I II相关推荐
- 【LeetCode】剑指 Offer 59 - II. 队列的最大值
[LeetCode]剑指 Offer 59 - II. 队列的最大值 文章目录 [LeetCode]剑指 Offer 59 - II. 队列的最大值 package offer;import java ...
- 【LeetCode】剑指 Offer 58 - II. 左旋转字符串
[LeetCode]剑指 Offer 58 - II. 左旋转字符串 文章目录 [LeetCode]剑指 Offer 58 - II. 左旋转字符串 一.字符串切片 二.列表遍历拼接 三.字符串遍历拼 ...
- 【LeetCode】剑指 Offer 32 - II. 从上到下打印二叉树 II
[LeetCode]剑指 Offer 32 - II. 从上到下打印二叉树 II 文章目录 [LeetCode]剑指 Offer 32 - II. 从上到下打印二叉树 II 一.层序遍历 BFS 一. ...
- 【LeetCode】剑指 Offer 55 - II. 平衡二叉树
[LeetCode]剑指 Offer 55 - II. 平衡二叉树 文章目录 [LeetCode]剑指 Offer 55 - II. 平衡二叉树 一.后序遍历 + 剪枝(从底至顶) 一.后序遍历 + ...
- 【LeetCode】剑指 Offer 68 - II. 二叉树的最近公共祖先
[LeetCode]剑指 Offer 68 - II. 二叉树的最近公共祖先 文章目录 [LeetCode]剑指 Offer 68 - II. 二叉树的最近公共祖先 一.DFS 一.DFS 祖先的定义 ...
- 【LeetCode】剑指 Offer 57 - II. 和为s的连续正数序列
[LeetCode]剑指 Offer 57 - II. 和为s的连续正数序列 文章目录 [LeetCode]剑指 Offer 57 - II. 和为s的连续正数序列 一.求和公式 二.滑动窗口(双指针 ...
- 【leetcode】963. Minimum Area Rectangle II
题目如下: Given a set of points in the xy-plane, determine the minimum area of any rectangle formed from ...
- 【leetcode】搜索二维矩阵 II
题目: 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵具有以下特性: 每行的元素从左到右升序排列. 每列的元素从上到下升序排列. 示例: 现有矩阵 ma ...
- 【Leetcode】552. 学生出勤记录 II
552. 学生出勤记录 II 题目描述 解题思路 题目描述 可以用字符串表示一个学生的出勤记录,其中的每个字符用来标记当天的出勤情况(缺勤.迟到.到场).记录中只含下面三种字符: 'A':Absent ...
最新文章
- 计算机桌面文件管理窗口,隐藏Win10此电脑窗口的6个额外文件夹
- GIt版本回退还不会用?轻松学会不怕失误
- ASP.NET中的状态管理
- 解决SurfaceView调用setZOrderOnTop(true)遮挡其他控件的问题
- php两个字符串怎么比较,php比较两个字符串的函数strcasecmp()
- JS不能向WASM传递数组?
- 人物-李彦宏:李彦宏
- 维视智造机器视觉表面缺陷检测技术
- 阿里面试题:鹿晗发布恋情,为什么微博挂了?
- C语言学习(十)C语言中的小数
- 安卓App自启动,两种不同的方式!!!支持到安卓4.4
- Kaggle所有量化金融竞赛汇总。
- 小米盒子为什么搜不到电视家?电视安装包解析错误解决方案
- python读取7个数(1-50)的整数值_python每日一题总结7
- mysql 中自增的起始值和步长_MySQL设置自增初始值和步长
- ANSYS中各个单元的思考和分析(杆和梁)
- 测测你的金钱观爱情观事业观
- csv格式(csv格式怎么编辑)
- 相似度度量:欧氏距离与余弦相似度(Similarity Measurement Euclidean Distance Cosine Similarity)...
- NVR –D款设备如何将4路拓展成6路?
热门文章
- 数据挖掘原理与算法:练习题1
- 测试环境搭建流程_案例解析:一个完整的项目测试方案流程,应该是怎么的?...
- linux 磁盘扩容_当LINUX服务器磁盘空间不够时如何进行磁盘扩容?
- php类对象无法转还子符串问题,php – 类stdClass的对象无法转换为字符串
- nc65语义模型设计_完整word版,NC数据加工做语义模型
- python 制作高斯mask_【趣味案例】用Python制作各种酷炫词云图,原来这么简单!...
- 14、ListView案例
- 生成,保存和转换pcd点云文件
- 找不到具有指定ID的对话框类解决方法
- 如何安装vscode网页版_Windows10专业版/企业版如何安装Microsoft store