其中一个样例段错误,原因是其中有一个样例,需要删除的那个链表为空,因此导致段错误。
#include<cstdio>
#include<vector>
#include<string>
#include<cmath>
#define maxn 100100
#define maxm 10100
using namespace std;
vector<int> keep, remv;
int input[maxn], nest[maxn];
bool ex[maxm];
int main() {
fill(ex, ex + maxm, false);
int N, firstad;
int a, b, c;
scanf("%d %d", &firstad, &N);
while(N--) {
scanf("%d %d %d", &a, &b, &c);
input[a] = b;
nest[a] = c;
}
int ad = firstad, data;
while (ad != -1) {
data = abs(input[ad]);
if (ex[data] == false) {
ex[data] = true;
keep.push_back(ad);
}
else {
remv.push_back(ad);
}
ad = nest[ad];
}
int len = keep.size();
for (int i = 0; i < len - 1; i++) {
ad = keep[i];
printf("%05d %d %05d\n", ad, input[ad], keep[i + 1]);
}
printf("%05d %d -1\n", keep[len - 1], input[keep[len - 1]]);
len = remv.size();
if (len == 0) return 0; // 加这一行就不会有段错误
for (int i = 0; i < len - 1; i++) {
ad = remv[i];
printf("%05d %d %05d\n", ad, input[ad], remv[i + 1]);
}
printf("%05d %d -1\n", remv[len - 1], input[remv[len - 1]]);
return 0;
}