题目给出的是数组构成的链表。可以先用数组存储链表,然后访问第一个链表,利用st[]数组记录访问过,当第二个链表遍历时,若遇见已经遍历过的,就是两个链表的第一个公共节点。同时如果用int数组存储的要注意输出五位数,不然会error。
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=100010;
int ne[N];
bool st[N];
int main()
{
int n1,n2,n;
cin>>n1>>n2>>n;
for(int i=0;i<n;i++){
int a,b;
char c;
cin>>a>>c>>b;
ne[a]=b;
}
for(int i=n1;i!=-1;i=ne[i]){ //遍历第一个链表
st[i]=true;
}
for(int i=n2;i!=-1;i=ne[i]){ //遍历第二个链表
if(st[i]){
printf("%05d\n",i);
return 0;
}
}
cout<<"-1"<<endl;
return 0;
}