160. 相交連結串列(雙指標)
阿新 • • 發佈:2021-02-05
技術標籤: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; } };