先将A链末尾和B链头部接起来
然后判断是否有环,如果无环,说明肯定不想交,如果有环,那么相交的位置就是环开始的位置
第一遍做的时候没遇到什么问题,第二遍做的时候各种出错,后来发现原来在用快慢指针法的时候快慢指针要从起点开始,否则计算出来的第一个相交位置不是环开始的位置。。
代码:
1 ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) { 2 if (!headA || !headB) 3 return NULL; 4 5 ListNode *h = headA; 6 while (h->next) 7 h = h->next; 8 h->next = headB; 9 10 ListNode *fast = headA; 11 ListNode *slow = headA; 12 bool running = false; 13 ListNode *res = NULL; 14 15 while ((!running || fast != slow) && fast && fast->next) { 16 running = true; 17 fast = fast->next->next; 18 slow = slow->next; 19 } 20 if (fast == slow) { 21 res = headA; 22 while (res != slow) { 23 res = res->next; 24 slow = slow->next; 25 } 26 } 27 h->next = NULL; 28 29 return res; 30 }