142 Linked List Cycle II(如果链表有环,找到入口结点Medium)
题目意思:如果有环,返回入口结点
思路:先判断有没环,再计算环的结点数,然后p1指向头,p2往后移结点次数,p1、p2相遇为入口结点
ps:还是利用指针间距这个思路
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 if(head==NULL)return NULL; 13 ListNode *p1,*p2; 14 p1=p2=head; 15 int n=1; 16 while(p2->next&&p2->next->next){ 17 p1=p1->next; 18 p2=p2->next->next; 19 if(p1==p2){ 20 while(p1->next!=p2){ 21 p1=p1->next; 22 ++n; 23 } 24 p1=p2=head; 25 while(n--){ 26 p2=p2->next; 27 } 28 while(true){ 29 if(p1==p2)return p1; 30 p1=p1->next; 31 p2=p2->next; 32 } 33 } 34 } 35 return NULL; 36 } 37 };