1. 程式人生 > >劍指offer第三十六題:兩個連結串列的第一個公共結點

劍指offer第三十六題:兩個連結串列的第一個公共結點

題目描述

輸入兩個連結串列,找出它們的第一個公共結點。

思路:由於引數都是單鏈表,那麼意味著遇到第一個公共結點後,後邊的結點都是公共結點,用雜湊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;
    }
};