思路:首先将第一个链表所遍历到的所有地址存储下来,然后遍历第二个链表,一旦遍历到的地址在第一个链表中存在,便找到了.
注意点:
1、遇到%d%c在一块输入时要小心%c会吸收空格.
2、地址是5位数,输出时千万不能忘了%+05d,此处导致了一个测试点答案错误.
#include<cstdio>
#include<cstdlib>
#include<string.h>
#include<math.h>
#include<iostream>
#include<vector>
#include<set>
#include<map>
#include<stack>
#include<queue>
#include<string>
#include<algorithm>
using namespace std;
const int maxn=100010;
int start[maxn];
int store[maxn];
int main(){
#ifdef ONLINE_JUDGE
#else
freopen("1.txt","r",stdin);
#endif
memset(store,0,sizeof(store));
int one,two,n;
scanf("%d%d%d",&one,&two,&n);
for(int i=0;i<n;i++){
int idx;
char c;
scanf("%d",&idx);
getchar(); //吸收空格,以防被之后的%c输入
scanf("%c %d",&c,&start[idx]);
}
while(one!=-1){
store[one]=one;
one=start[one];
}
while(two!=-1){
if(store[two]!=0){
printf("%05d",two); //此处忘了+05,导致不足五位的整数无法正确输出.
break;
}
two=start[two];
}
if(two==-1){
printf("-1");
}
return 0;
}
算法笔记中用的静态链表,通过判断flag是否为true也挺方便的.