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?

思路:由【Leetcode】Linked
List Cycle
可知。利用一快一慢两个指针可以推断出链表是否存在环路。

如果两个指针相遇之前slow走了s步,则fast走了2s步。而且fast已经在长度为r的环路中走了n圈,则可知:s = n * r。假定链表长为l。从链表头到环入口点距离为x。从环入口点到相遇点距离为a,则:x + a = s = n * r = (n - 1) * r + r =  (n
- 1) * r + l - x。因此x = (n - 1) * r + (l - x - a)。(l - x - a)为从相遇点到环入口的距离,这意味着当一个指针从链表头出发时,还有一个指针从相遇点開始出发,两者一定会在环入口处相遇。

/**
* 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) {
ListNode * slow = head;
ListNode * fast = head; while(fast && fast->next)
{
slow = slow->next;
fast = fast->next->next; if(slow == fast)
{
ListNode *slow2 = head;
while (slow2 != slow)
{
slow2 = slow2->next;
slow = slow->next;
}
return slow2;
}
} return NULL; }
};

版权声明:本文博主原创文章,博客,未经同意不得转载。

最新文章

  1. 背水一战 Windows 10 (14) - 动画: 线性动画, 关键帧动画
  2. nginx.conf详解
  3. iOS开发小技巧--获取自定义的BarButtonItem中的自定义View的方法(customView)
  4. iOS 中关于ViewController总结
  5. Bootstrap之Carousel问题
  6. placeholder 兼容IE9以下版本 包含pasword
  7. Linux误删C基本运行库libc.so.6急救方法
  8. [置顶] Asp.Net---css样式的使用方式
  9. java 文件操作 写入和读取(小结一)
  10. 菜鸟玩云计算之十二:KVM虚拟机更改大小
  11. android binder理解
  12. HashMap源码调试——认识"put"操作
  13. 关于thinkphp5URL重写
  14. 通过Eureka自带REST API强行剔除失效服务
  15. Linux下创建C函数库
  16. day5模块学习--re正则模块
  17. vector erase的错误用法
  18. 【BZOJ4554】【TJOI2016】【HEOI2016】游戏
  19. VC中编译报错:error C2011: 'fd_set' : 'struct' type redefinition
  20. JavaScript快速入门-ECMAScript对象介绍

热门文章

  1. Vertx简介
  2. 【重拾Effective Java】一
  3. 28、应用调试之strace命令来跟踪系统调用
  4. css实现悬浮效果的阴影
  5. [机器学习] Coursera ML笔记 - 逻辑回归(Logistic Regression)
  6. YUV与RGB格式转换
  7. TF-IDF计算方法和基于图迭代的TextRank
  8. POJ - 2236Wireless Network-并查集
  9. [Angular] FormBuildAPI
  10. MVC 设置项目默认起始页和多级目录的路由配置