题目要求

Given a linked list, return the node where the cycle begins. If there is no cycle, returnnull.

Follow up:
Can you solve it without using extra space?

如何找到环的第一个节点?

根据题目意图,我们可以构建如下模型:

设:链表头是X,环的第一个节点是Y,slow和fast第一次的交点是Z。各段的长度分别是a,b,c,如图所示。环的长度是L。slow和fast的速度分别是v,2v。

由slow和fast第一次在点Z相遇,我们可以得出以下等式:

        2(a+b)=(a+2b+c) 

       => a=c

由此可见,a和c的长度一样。因此我们可以将slow重新定位到头结点,然后fast与slow以相同的速度前进,相遇的节点Y则是环的开始节点。

代码实现:

class Solution {
public:
ListNode *detectCycle(ListNode *head) {
ListNode* slow=head;
ListNode* fast=head;
while(true){
if(fast==nullptr||fast->next==nullptr){
return nullptr;
}
slow=slow->next;
fast=fast->next->next;
if(fast==slow){
break;
}
}
slow=head;
while(slow!=fast){
slow=slow->next;
fast=fast->next;
}
return slow;
}
};

最新文章

  1. DOM中文本节点索引方法
  2. 00 alv抬头等
  3. MonoDevelop编辑器中文乱码解决
  4. springMVC创建基础变量
  5. Requirejs2.0笔记
  6. 利用DescriptionAttribute实现枚举字符串
  7. Java Pattern Matcher 正则应用
  8. ONCOCNV软件思路分析之control处理
  9. c# Base64解密加密
  10. MongoDB副本集(一主一备+仲裁)环境部署-运维操作记录
  11. keycloak
  12. input标签(图像域和隐藏域)
  13. 界面编程之QT的线程20180731
  14. 工作log
  15. 机器学习理论基础学习14.2---线性动态系统-粒子滤波 particle filter
  16. django 远程数据库mysql migrate失败报error 1045之 解决方案
  17. centos下安装docker,kubelet kubeadm kubectl
  18. 【树链剖分/倍增模板】【洛谷】3398:仓鼠找sugar
  19. 如何批处理多个MySQL文件
  20. GDI/GDI+这些破事

热门文章

  1. windows安装虚拟主机virtualbox遇到的困难
  2. 服务器Windows Server 2008 远程控制安全设置技巧
  3. 安装CentOS7,连接mysql提示密码错误
  4. vue-cli项目中,全局引入jquery
  5. hadoop2.6.0实践:引入开发依赖的jar包
  6. Spring Security入门(1-12)Spring Security 的过滤器机制
  7. Python的下载及安装
  8. linux下mongodb安装、服务器、客户端、备份、账户命令
  9. Java 高级开发必修知识---反射
  10. MySQL/上