1. 程式人生 > 其它 >160. 相交連結串列(雙指標)

160. 相交連結串列(雙指標)

技術標籤:leetcode刷題

###解題思路

雙指標演算法,定義p1和p2分別指向頭節點headA和headB,讓p1,p2同時走,如果p1走到盡頭,則讓p1指向headB,如果p2走到盡頭,則讓p2指向headA

直到兩個指標相遇為止(注:如果兩個連結串列不相交,則p1p2在走到盡頭分別交換頭節點後,再次走到盡頭仍不相遇)

###程式碼

class Solution {
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
        ListNode* p1 = headA;
        ListNode* p2 = headB;
        if(p1 == NULL || p2 == NULL) return NULL;
        bool p1flag = false,p2flag = false;
        while(p1 != p2){
            p1 = p1->next;
            p2 = p2->next;
            if(p1 == NULL){
                if(p1flag) break;
                p1 = headB;
                p1flag = true;
            }
            if(p2 == NULL){
                if(p2flag) break;
                p2 = headA;
                p2flag = true;
            }
        }
        if(p1 == p2) return p1;
        return NULL;
    }
};