[PAT解题报告] Linked List Sorting
简单题, 对链表排序。不过它链表给出的方式是,每个节点的地址,内容,和next节点的地址——再给一个头节点的地址。
我采取简单策略,沿着原始链表,按顺序新建一个数组,包含自身的内容和地址,然后对数组按内容关键字排序。
输出的时候注意:
(1) 表头 数组第一个元素的地址
(2) 除了最后一个元素外,next的地址就是它下一个元素的地址。
输出地址用%05d即可。注意空是-1,还有空链表本身的输出。
代码:
#include <cstdio>
#include <algorithm>
using namespace std;
pair<int,int> a[100005];
pair<int,int> b[100005];
int main() {
int n, head;
scanf("%d%d",&n,&head);
for (int i = 0; i < n; ++i) {
int x;
scanf("%d",&x);
scanf("%d%d",&a[x].first,&a[x].second);
}
for (n = 0;head >= 0; head = a[head].second, ++n) {
b[n] = make_pair(a[head].first, head);
}
sort(b, b + n);
printf("%d",n);
if (n == 0) {
puts(" -1");
}
else {
printf(" %05d\n",b[0].second);
for (int i = 0; i < n; ++i) {
printf("%05d %d", b[i].second, b[i].first);
if (i + 1 < n) {
printf(" %05d\n",b[i + 1].second);
}
else {
puts(" -1");
}
}
}
return 0;
}
原题链接:http://www.patest.cn/contests/pat-a-practise/1052