LeetCode142. 环形链表 II
题目
分析

此图摘自代码随想录
可以列出方程:(x + y) * 2 = x + y + n (y + z) ——快指针走的距离是慢指针走的两倍
化简: x + y = n (y + z)
x = n (y + z) - y
x = (n - 1) (y + z) + z——这是最终结果,表示从头结点出发一个指针,从相遇节点 也出发一个指针,这两个指针每次只走一个节点, 那么当这两个指针相遇的时候就是 环形入口的节点
代码
1 class Solution { 2 public: 3 ListNode *detectCycle(ListNode *head) { 4 ListNode *fast = head;ListNode *slow = head; 5 while(fast != NULL && fast->next != NULL){ 6 slow = slow->next; 7 fast = fast->next->next; 8 if(fast == slow){ 9 ListNode *s1 = head; 10 ListNode *s2 = fast; 11 while(s1 != s2){ 12 s1 = s1->next; 13 s2 = s2->next; 14 } 15 return s1; 16 } 17 } 18 return NULL; 19 } 20 };
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号