代码改变世界

leetcode - Linked List Cycle II

2013-11-02 14:37  张汉生  阅读(178)  评论(0)    收藏  举报

 

 1 /**
 2  * Definition for singly-linked list.
 3  * struct ListNode {
 4  *     int val;
 5  *     ListNode *next;
 6  *     ListNode(int x) : val(x), next(NULL) {}
 7  * };
 8  */
 9 class Solution {
10 public:
11     ListNode *detectCycle(ListNode *head) {
12         // IMPORTANT: Please reset any member data you declared, as
13         // the same Solution instance will be reused for each test case.
14         ListNode * itr = head;
15         ListNode * last = NULL;
16         int n = 1;
17         while (true){
18             if (itr==NULL)
19                 return NULL;
20             ListNode * tmp = itr;
21             for (int i=0; i<n; i++){
22                 tmp = tmp->next;
23                 if (tmp==NULL)
24                     return NULL;
25                 else if (tmp == itr){
26                     ListNode * rlt = head;
27                     while (true){
28                         ListNode * rltItr = rlt;
29                         for (int j=0; j<=i; j++){
30                             rltItr = rltItr->next;
31                             if (rltItr == rlt)
32                                 return rlt;
33                         }
34                         rlt = rlt->next;
35                     }
36                 }
37             }
38             n++;
39             itr = itr->next;
40         }
41         return NULL;
42     }
43 };