查找有环链表的入环结点
来源:互联网 发布:在线音乐识别软件 编辑:程序博客网 时间:2024/06/05 14:16
给定一个有环链表,求其入环结点
不允许修改链表或使用额外空间
Linked List Cycle II
设慢指针走过的路程为s,则快指针走过的路程为2s
快慢指针相遇时,慢指针必然没有遍历完链表
而快指针已经沿环走过了n(n>=1)圈
设链表长度为L,头结点到环入口点的长度为x
环入口点到相遇点的长度为a,环的长度为r
则有2s=s+nr
s=nr
x+a=nr=(n-1)r+r
x+a=(n-1)r+(L-x)
x=(n-1)r+(L-x-a)
则当快慢指针相遇时,设置一个新指针
从首结点出发,其速度与慢指针相等
则新指针与慢指针相遇点为入环结点
时间复杂度为O(n),空间复杂为O(1)
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode *detectCycle(ListNode *head) { if(head==NULL) return NULL; ListNode *fast=head,*slow=head; while(fast&&fast->next) { fast=fast->next->next; slow=slow->next; if(fast==slow) { ListNode *slow2=head; while(slow2!=slow) { slow2=slow2->next; slow=slow->next; } return slow2; } } return NULL; }};
0 0
- 查找有环链表的入环结点
- 查找线索树的结点
- rapidxml查找结点内相同结点标签的内容
- MFC CTreeCtrl类的结点遍历查找
- 查找单链表的第k个结点
- 查找树中到某一结点的路径
- [C++]查找两链表的公共结点
- 二叉树的祖先结点,删除,插入,查找,前驱结点,后继结点等
- data_struction_test3:二叉查找树,查找值最小的结点
- 查找二叉查找树的任意给定结点的“下一个”结点
- Chapter 2 | Linked Lists--查找循环链表中的环的开始结点
- 单链表结点查找
- 快速查找长度未知的单链表的中间结点
- 单链表的逆置和中间结点的查找
- 用XML结点的属性值查找相同结点的其它属性值[C#]
- 二叉树中查找值为x的结点,打印x结点的全部祖先
- 查找链表的倒数第K个结点
- 查找页面中所有类为test的结点
- TreeMap原理(源码学习)
- hdu 1285 确定比赛名次 拓扑排序
- 微机原理==第二章16位和32位微处理器(6)
- Mac OS X快捷键
- Android中jar包常见疑难杂症汇总及解决方案(待完善)
- 查找有环链表的入环结点
- Interruption Source 的意义
- 搭建Redis主从集群搭建、redis-sentinel的配置以及Jedis对Sentinel的使用[ by 嗡汤圆 ]
- js判断是否在微信浏览器中打开
- Elasticsearch JDBC的使用-MySQL 数据源导入和增量索引、更新
- 搞Android用java偏偏要去看iOS的oc代码
- extern "c"用法解析
- android基础_第四天
- Xcode8控制台输出警告:subsystem: com.apple.UIKit, category: HIDEventFiltered, enable_level: 0