两个链表的第一个公共节点
方法1:通过集合的方式
先遍历一个链表,并把节点全都放进一个集合(注意是节点,不是节点元素),然后遍历第二个链表,并且在集合中找有没有这个元素,如果有,就返回这个节点(该节点就是两个链表哦的第一个公共节点)
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
unordered_set<ListNode*> s;
ListNode* p1=pHead1;
ListNode* p2=pHead2;
while(p1!=NULL)
{
s.insert(p1);
p1=p1->next;
}
//unordered_set<ListNode*>::iterator pos;
while(p2!=NULL)
{
if(s.find(p2)!=s.end())
return p2;
p2=p2->next;
}
return NULL;
}
};方法2:
分别遍历两个链表并且记录两个链表的长度,然后让长的那个先走差值步数,然后两个一起走,相遇的地方就是第一个公共节点
代码没有编出来


查看7道真题和解析