将A链表尾与B链表头连接起来。若两链表相交,则存在环,且交点为环入口,则该题转化为 "环入口求解问题"(Leecode 142)。
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
ListNode* tailA = headA;
while(tailA->next) tailA = tailA->next;
tailA->next = headB;
ListNode* p = detectCycle(headA);
tailA->next = NULL;
return p;
}
ListNode *detectCycle(ListNode *head) {
if(!head || !head->next) return NULL;
ListNode* slow = head;
ListNode* fast = head;
ListNode* fast = head->next;
while (fast&&fast->next) {
if (slow==fast) break;
slow = slow->next;
fast = fast->next->next;
}
if (slow != fast) {
return NULL;
} else {
slow = head;
// fast = fast->next;
while (fast!=slow) {
slow = slow->next;
fast = fast->next;
}
return fast;
}
}
};