1052 Linked List Sorting (25分)
链表的地址一定记得printf("%05d\n")否则会有部分测试点过不了
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
struct Node
{
int address;
int key;
int next;
bool flag;
}node[100000];
bool cmp(Node a,Node b)
{
if (!a.flag || !b.flag)//a,b其中之一为false
return a.flag > b.flag;
else
return a.key < b.key;
}
int main()
{
freopen("input.txt", "r", stdin);
int n, start,cnt = 0 ,a;
cin >> n >> start;
for (int i = 0; i < n; i++)
{
cin >> a;
cin >> node[a].key >> node[a].next;
node[a].address = a;
node[a].flag = false;
}
for (int i = start; i != -1; i = node[i].next)//遍历链表
{
node[i].flag = true;
cnt++;
}
if (cnt == 0) {
printf("0 -1");
}
else
{
sort(node + 0, node + 100000, cmp);
printf("%d %05d\n", cnt, node[0].address);
for (int i = 0; i < cnt - 1; i++)
{
printf("%05d %d %05d\n", node[i].address, node[i].key, node[i+1].address);
}
printf("%05d %d %d", node[cnt - 1].address, node[cnt - 1].key, -1);
}
return 0;
}