題目描述
輸入兩個鏈表,找出它們的第一個公共結點。(注意因爲傳入數據是鏈表,所以錯誤測試數據的提示是用其他方式顯示的,保證傳入數據是正確的)
方法一:雙指針
方法二: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;
}
};