解题思路:线性表的数组实现。扫描第一个线性表,将其中出现的所有address全部标记为true,接着遍历第二个线性表,只要有一个地址在第一个线性表中出现就停止遍历(之后的一定和第一个线性表有相同的后缀),输出此结果。
代码如下:
#include<bits/stdc++.h>
#define lowbit(x) ((x)&(-(x)))
#define ll long long
#define INF 0x3f3f3f3f
#define N 100000
#define CLR(a) memset(a, 0, sizeof(a))
using namespace std;
struct node{
int address;
char key;
int next;
}p[100005];
bool exist[100005];
int main() {
int head1,head2,n,tmp;
cin>>head1>>head2>>n;
for(int i=0;i<n;i++){
cin>>tmp;
cin>>p[tmp].key>>p[tmp].next;
p[tmp].address=tmp;
}
for(int i=head1;i!=-1;i=p[i].next){
exist[i]=true;
}
for(int i=head2;i!=-1;i=p[i].next){
if(exist[i]){
printf("%05d\n",i);
return 0;
}
}
printf("-1\n");
return 0;
}