题目

代码

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;
}
};

思路

简单说下思路,现在已经知道的条件:

  1. 快指针移动速度为慢指针两倍;
  2. 快指针要比慢指针多移动一圈;

可得:

假设\(L\)为链表入口到环入口的距离,\(x\)为环入口到相遇点的距离,\(C\)为环的周长,可得:

\(2 \times (L + x) - (L + x) = C\),即\(L + x = C\),可得:\(x = C - L\),即相遇点到环入口的距离与链表入口到环入口的距离相等,所以可以通过让慢指针回到链表入口,然后快慢指针同时一步一步地前进,最后相遇的地方就是环的入口。

最新文章

  1. Atitit 自然语言处理原理与实现 attilax总结
  2. 【转】WPF DataGrid 获取选中的当前行某列值
  3. 迭代器 iterator(二): 用iterator遍历arraylist
  4. Bitwise AND of Numbers Range
  5. css中transition的使用以及:before:after的使用(小样式)
  6. [转发]导出Excel 格式 mso-number-format
  7. 服务接口API限流 Rate Limit 续
  8. 用android模拟器Genymotion定位元素
  9. Ms SQL Server 约束和规则
  10. Jtree(节点的渲染+资源管理器)(2)
  11. 网页解析不了PHP源代码的解决方法
  12. Linux应用环境实战05:在Ubuntu 14.10中借用Windows的字体 (转)
  13. TIdTCPClient 详解
  14. kali ssh服务连接问题,无法远程管理
  15. CodeForces-748C
  16. Android播放功能的实现
  17. ThinkPHP5.*版本发布安全更新
  18. nativefier(一行代码将任意网页转化为桌面应用)
  19. ASP.NET WebForm 检测页面刷新(Refresh)
  20. centos7 LANMP 安装

热门文章

  1. git设置Eclipse中忽略的文件
  2. MySQL之表查询
  3. Linux文件的操作及授权
  4. Python自动化学习--鼠标和键盘事件
  5. Codeforces Round #427 (Div. 2) - D
  6. tee 多重定向
  7. bzoj3631: [JLOI2014]松鼠的新家(树上差分)
  8. hdu 4638 Group(离线+树状数组)
  9. 以太坊智能合约开发工具 Truffle 入门1
  10. 大数减法(A - B Problem Plus)问题