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

带环链表 II

时间:2017-06-16 16:54:54      阅读:253      评论:0      收藏:0      [点我收藏+]

标签:fast   null   div   blog   head   ack   bsp   ==   style   

单链表,问有没有环,若有,找到环的入口.

Lintcode上挑战,只许使用常数的空间.

设一个快指针fast,一个慢指针slow,fast每次走2步,slow每次走1步.

若无相遇找到了链尾,则无环,若相遇了,则有环.

设从链头到环入口点走了a步,从环入口到相遇点走了x步,环长r.相遇时,slow走了s步,fast走了2s步.

有:

s=a+x,  2s=a+nr+x.

所以a+x=nr->a=nr-x.

注意理解a=nr-x.意思是从链头走到环入口的 步数=再走n圈,并退x步.那刚好也在环入口.

 1 class Solution {
 2 public:
 3     ListNode *detectCycle(ListNode *head) {
 4         ListNode *slow = head, *fast = head;
 5         while (fast && fast->next) {
 6             slow = slow->next;
 7             fast = fast->next->next;
 8             if (slow == fast)
 9                 break;
10         }
11         if (!fast || !fast->next)
12             return NULL;
13         slow = head;
14         while (slow != fast) {
15             slow = slow->next;
16             fast = fast->next;
17         }
18         return slow;
19     }
20 };

 

 

带环链表 II

标签:fast   null   div   blog   head   ack   bsp   ==   style   

原文地址:http://www.cnblogs.com/yujinding/p/7027739.html

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