LeetCode——142 设计链表2
2024-09-04 16:07:12
题目
代码
class Solution {
public:
ListNode *detectCycle(ListNode *head) {
ListNode *fast = head, *slow = head;
while(fast && fast->next){
fast = fast->next->next;
slow = slow->next;
if(fast == slow){
break;
}
}
if(!fast || !fast->next){
return NULL;
}
slow = head;
while(slow!=fast){
slow = slow->next;
fast = fast->next;
}
return slow;
}
};
思路
简单说下思路,现在已经知道的条件:
- 快指针移动速度为慢指针两倍;
- 快指针要比慢指针多移动一圈;
可得:
假设\(L\)为链表入口到环入口的距离,\(x\)为环入口到相遇点的距离,\(C\)为环的周长,可得:
\(2 \times (L + x) - (L + x) = C\),即\(L + x = C\),可得:\(x = C - L\),即相遇点到环入口的距离与链表入口到环入口的距离相等,所以可以通过让慢指针回到链表入口,然后快慢指针同时一步一步地前进,最后相遇的地方就是环的入口。
最新文章
- Atitit 自然语言处理原理与实现 attilax总结
- 【转】WPF DataGrid 获取选中的当前行某列值
- 迭代器 iterator(二): 用iterator遍历arraylist
- Bitwise AND of Numbers Range
- css中transition的使用以及:before:after的使用(小样式)
- [转发]导出Excel 格式 mso-number-format
- 服务接口API限流 Rate Limit 续
- 用android模拟器Genymotion定位元素
- Ms SQL Server 约束和规则
- Jtree(节点的渲染+资源管理器)(2)
- 网页解析不了PHP源代码的解决方法
- Linux应用环境实战05:在Ubuntu 14.10中借用Windows的字体 (转)
- TIdTCPClient 详解
- kali ssh服务连接问题,无法远程管理
- CodeForces-748C
- Android播放功能的实现
- ThinkPHP5.*版本发布安全更新
- nativefier(一行代码将任意网页转化为桌面应用)
- ASP.NET WebForm 检测页面刷新(Refresh)
- centos7 LANMP 安装