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 }

 

posted @ 2015-02-02 18:22  李舜阳  阅读(164)  评论(0编辑  收藏  举报