题目描述
输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)
方法一:双指针
方法二: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;
}
};