有几个特殊情况:
1、开头就相同
2、不是以-1结尾
考虑到这两个就应该oK了。。
#include <iostream>
#include <string>
#include <vector>
#define MAX 100010
using namespace std;
struct Node {
char c;
int next;
};
Node str[MAX];
int main() {
int p1, p2, N;
cin >> p1 >> p2 >> N;
int len1 = 0, len2 = 0;
if (p1 == p2) {
printf("%05d\n", p1);
return 0;
}
int Add;
for (int i = 0; i < N;i++) {
scanf("%d", &Add); cin.get();
scanf("%c %d", &str[Add].c, &str[Add].next);
}
int p = p1;
while (p != -1) {
#ifdef _DEBUG
printf("%05d %c %05d\n", p, str[p].c, str[p].next);
#endif
p = str[p].next;
len1++;
}
p = p2;
while (p != -1) {
#ifdef _DEBUG
printf("%05d %c %05d\n", p, str[p].c, str[p].next);
#endif
p = str[p].next;
len2++;
}
int i = p1,j = p2;
int gap;
if (len1 < len2) {
gap = len2 - len1;
while (gap) {
j = str[j].next;
gap--;
}
}
else {
gap = len1 - len2;
while (gap) {
i = str[i].next;
gap--;
}
}
bool tag = false;
while (i != -1 && j != -1) {
if (str[i].next == str[j].next) {
if (str[j].next == -1)
cout << "-1" << endl;
else
printf("%05d\n", str[i].next);
tag = true;
break;
}
else {
i = str[i].next;
j = str[j].next;
}
}
if (!tag)
cout << "-1" << endl;
system("pause");
return 0;
}