• Question :

      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?

  • Anaylsis :
    •   

      首先,比较直观的是,先使用Linked List Cycle I的办法,判断是否有cycle。如果有,则从头遍历节点,对于每一个节点,查询是否在环里面,是个O(n^2)的法子。但是仔细想一想,发现这是个数学题。

      如下图,假设linked list有环,环长Y,环以外的长度是X。

      现在有两个指针,第一个指针,每走一次走一步,第二个指针每走一次走两步,如果他们走了t次之后相遇在K点

      那么       指针一  走的路是      t = X + nY + K        ①

      指针二  走的路是     2t = X + mY+ K       ②          m,n为未知数

      把等式一代入到等式二中, 有

      2X + 2nY + 2K = X + mY + K

      =>   X+K  =  (m-2n)Y    ③

      这就清晰了,X和K的关系是基于Y互补的。等于说,两个指针相遇以后,再往下走X步就回到Cycle的起点了。这就可以有O(n)的实现了。

    • from : http://fisherlei.blogspot.tw/2013/11/leetcode-linked-list-cycle-ii-solution.html
  • Code :
    •   

      /**
      * Definition for singly-linked list.
      * struct ListNode {
      * int val;
      * struct ListNode *next;
      * };
      */
      struct ListNode *detectCycle(struct ListNode *head) {
      if(!head) return NULL;
      struct ListNode* slow=head;
      struct ListNode* fast=head;
      while(fast && fast->next) {
      fast = fast->next->next;
      slow = slow->next;
      if (slow == fast) break;
      }
      if(!fast || !fast->next) return NULL;
      while (slow != head) {
      slow = slow->next;
      head = head->next;
      }
      return slow;
      }

最新文章

  1. [LeetCode] Sentence Screen Fitting 调整屏幕上的句子
  2. request 、response和session的区别
  3. CSS3.0盒模型display:box;的使用
  4. Android RadioGroup 及资源文件 & selector
  5. 关于PHP的正则表达式
  6. (单选后,显示相对应的div)点击免费没有变化,点击收费出现输入框
  7. 【笨嘴拙舌WINDOWS】实践检验之剪切板查看器【Delphi】
  8. linux故障救援
  9. python 输出字符串如果遇到字典
  10. Eclipse开发android安装环境
  11. 绿色版的mysql安装配置方式
  12. Hibernate配置文件中配置各种数据库的driver、URL
  13. opencv探索之路(十二):感兴趣区域ROI和logo添加技术
  14. Git版本管理的简介与安装[一]
  15. [原创]手把手教你写网络爬虫(5):PhantomJS实战
  16. 迷茫<第四篇:这两年>
  17. 【刷题】【LeetCode】总
  18. functools模块中partial的使用
  19. C和C指针小记(十三)-数组
  20. python学习笔记三——控制语句

热门文章

  1. Simple Vedio Intercom System
  2. Installation of the latest version of netease-cloud-music on Fedora 30 linux platform
  3. CentOS7修改为国内yum源
  4. CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://mirrors.ustc.edu.cn/anaconda/pkg
  5. react依赖注入之mapStateToProps&&mapDispatchToProps
  6. uboot URL 待填坑
  7. Pyhton---基础---递归
  8. hdu 6205: card card card【输入挂】
  9. 【leetcode】516. Longest Palindromic Subsequence
  10. 对props的研究