此题考静态链表的知识点,注意在链表的数据域中加入一个是否遍历过的bool位
#include<cstdio>
using namespace std;
// 应用静态链表
struct Node{
char data;
int next;
bool isFirst;
Node(){
data = ' ';
next = -1;
isFirst = false;
}
} node[100010];
int main(){
int h1, h2, N;
scanf("%d %d %d", &h1, &h2, &N);
// 扫描并构造静态链表
int tmpAddress, tmpNext;
char tmpData;
for(int i = 0; i < N; i++){
scanf("%d %c %d", &tmpAddress, &tmpData, &tmpNext);
node[tmpAddress].data = tmpData;
node[tmpAddress].next = tmpNext;
}
// 遍历第一条路径 将记录置为true
int p = h1;
while(p != -1){
node[p].isFirst = true;
p = node[p].next;
}
// 遍历第二条路路径 关注记录的值
p = h2;
while(!node[p].isFirst && p != -1){
p = node[p].next;
}
//printf("%d", p); // 这样会有一个测试用例错误
if(p != -1){
printf("%05d", p);// 地址要格式化输出
} else{
printf("%d", p);
}
return 0;
}
另法:
#include<cstdio>
using namespace std;
struct node{
char data;
int next;
bool flag = false;
}node[101000];
int main(){
int first = -1, second = -1, T = 0;
freopen("1.txt", "r", stdin);
scanf("%d %d %d", &first, &second, &T);
while(T--){
int index = -1, next = -1;
char c;
scanf("%d %c %d", &index, &c, &next);
node[index].data = c;
node[index].next = next;
}
int index = first;
while(index != -1){
node[index].flag = true;
index = node[index].next;
}
index = second;
while(index != -1){
if(node[index].flag == true){
printf("%05d", index);
return 0;
}
index = node[index].next;
}
printf("-1");
return 0;
}