Leetcode#160 Intersection of Two Linked Lists

原题地址

先将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 }
原文地址:https://www.cnblogs.com/boring09/p/4268435.html