劍指offer:兩個鏈表的第一個公共結點

題目描述
輸入兩個鏈表,找出它們的第一個公共結點。(注意因爲傳入數據是鏈表,所以錯誤測試數據的提示是用其他方式顯示的,保證傳入數據是正確的)

方法一:雙指針
方法二: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) 
    {
        //1.雙指針
        /*if(pHead1 == NULL || pHead2 == NULL) return NULL;
        ListNode* p1 = pHead1;
        ListNode* p2 = pHead2;
        while(p1!=p2)
        {
            p1 = (p1 == NULL) ? pHead2 : p1->next;
            p2 = (p2 == NULL) ? pHead1 : p2->next;
        }
        return p1;*/
        //2.set
        if(pHead1 == NULL || pHead2 == NULL) return NULL;
        ListNode* p1 = pHead1;
        ListNode* p2 = pHead2;
        set<ListNode*> s;
        while(p1!=NULL)
        {
            s.insert(p1);
            p1 = p1->next;
        }
        while(p2!=NULL)
        {
            if(s.count(p2) == 1)
            {
                return p2;
            }
            else
            {
                s.insert(p2);
                p2 = p2->next;    
            }
        }
        return NULL;
        
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章