分析:链表中存在无效结点,需要设置有效位进行标记,另外最后一个测试点head=-1。。此时输出0 -1。
代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
const int maxn = 1e5+10;
struct Node{
int data, addr, next, valid=0;
void read(){
scanf("%d%d", &data, &next);
}
bool operator < (const Node &b) const{
return valid == b.valid ? data < b.data : valid > b.valid;
}
}node[maxn];
int main(){
//freopen("aa.txt", "r", stdin);
int n, head, addr, len = 0;
scanf("%d%d", &n, &head);
for(int i = 0; i<n; i++) {
scanf("%d", &addr);
node[addr].addr = addr;
node[addr].read();
}
if(head == -1){
cout << "0 -1\n";
return 0;
}
while(head != -1){
len++;
node[head].valid = 1;
head = node[head].next;
}
sort(node, node+maxn);
printf("%d %05d\n", len, node[0].addr);
for(int i = 0; i<len; i++){
printf("%05d %d ", node[i].addr, node[i].data);
i!=len-1 ? printf("%05d\n", node[i+1].addr) : printf("-1\n");
}
return 0;
}