1、哈希表
class Solution {
public:
ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
map<ListNode*,int>m;
while(pHead1!=nullptr){
m[pHead1]=1;
pHead1=pHead1->next;
}
while(pHead2!=nullptr){
if(m[pHead2]){
return pHead2;
}
pHead2=pHead2->next;
}
return NULL;
}
};
2、常规做法
class Solution {
public:
ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
ListNode* cur1=pHead1;
ListNode* cur2=pHead2;
if(cur1==nullptr||cur2==nullptr) return nullptr;
int n=0;
while(cur1!=nullptr){//记录pHead1的长度
n++;
cur1=cur1->next;
}
while(cur2!=nullptr){//记录pHead2的长度
n--;
cur2=cur2->next;
}
cur1=n>0?pHead1:pHead2;//长
cur2=cur1==pHead1?pHead2:pHead1;//短
n=abs(n);
while(n!=0){//将长链表与短链表等长
cur1=cur1->next;
n--;
}
while(cur1!=cur2){//比较
cur1=cur1->next;
cur2=cur2->next;
}
return cur1;
}
};