劍指offer第三十六題:兩個連結串列的第一個公共結點
阿新 • • 發佈:2018-12-09
題目描述
輸入兩個連結串列,找出它們的第一個公共結點。
思路:由於引數都是單鏈表,那麼意味著遇到第一個公共結點後,後邊的結點都是公共結點,用雜湊set,將其中一個連結串列所有的結點先放入set中,然後遍歷第二個連結串列,遍歷的同時查詢set,若查到,則當前結點即為第一個公共結點。
程式碼:
/* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) { set<ListNode*> myset; ListNode* p1 = pHead1,*p2 = pHead2; while(p1 != NULL) { myset.insert(p1); p1 = p1->next; } while(p2!=NULL) { if(myset.find(p2)!= myset.end()) { return p2; } p2 = p2->next; } return nullptr; } };