[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

全部评论

相关推荐

04-02 16:49
门头沟学院 Java
_bloodstream_:我也面了科大讯飞,主管面的时候听说急招人优先考虑能尽快实习的,我说忙毕设,后面就一直没消息了
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务