码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode------Linked List Cycle II

时间:2014-12-11 18:52:32      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   color   sp   on   div   

标题: Linked List Cycle II
通过率 30%
难度 中等

 

看升级版前还是先看下 Linked List Cycle I  

看完第一个版本对于第二个版本会有一定的帮助,先了解环的结构。然后看下面的图片:

bubuko.com,布布扣

假设快慢指针交汇处为为分红圈那个,环的起始点为k,那么:

1、快指针走的路程是慢指针走的两倍。

2、慢指针到相遇点时走的路径为:x+y

3、快指针到相遇点走的路径为:x+y+z+y=x+2y+z

4、又因为1,所有有 x+y=x+2y+z

5、得出:x=z

于是我们发现了起点与重合点到循环起始点额距离是一样的。那么我们放两个指针从这两个地方开始遍历,当再次重合时便是循环开始点,具体代码如下:

 1 public class Solution {
 2     public ListNode detectCycle(ListNode head) {
 3         if(head==null) return null;
 4         if(head.next==null) return null;
 5         if(head.next.next==null) return null;
 6         
 7         ListNode slow=head;
 8         ListNode fast=head;
 9         
10         while(fast!=null && fast.next!=null){
11             slow=slow.next;
12             fast=fast.next.next;
13             if(fast==slow){
14                 slow=head;
15                 while(slow!=fast){
16                      slow=slow.next;
17                      fast=fast.next;
18                     }
19                 return fast;
20             }
21         }
22 
23         return null;
24         
25     }
26 }

 

leetcode------Linked List Cycle II

标签:style   blog   http   io   ar   color   sp   on   div   

原文地址:http://www.cnblogs.com/pkuYang/p/4158226.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!