PAT 1052 Linked List Sorting (25分)

这题的题意是让建一个链表对链表排序,但是我读完题后发现这题链表唯一的用处就是把测试用例中的无效节点过滤掉。至于排序部分,一个map一个vector即可搞定。

#include <iostream>
#include <algorithm>
#include <map>
#include <vector>

using namespace std;
struct node{
    int key;
    int next;
}nod[100010];
map<int,int>a;
vector <int> b;
int main(){
    int n,adr;
    cin>>n>>adr;
    int tmp_adr,tmp_key,tmp_next;
    for(int i=0;i<n;i++){                //输入链表
        scanf("%d%d%d",&tmp_adr,&tmp_key,&tmp_next);
        nod[tmp_adr].key=tmp_key;
        nod[tmp_adr].next=tmp_next;
    }
    while (adr!=-1){                         //遍历一遍,把在链表上的节点信息放进map和vector里
        a[nod[adr].key]=adr;
        b.push_back(nod[adr].key);
        adr=nod[adr].next;
    }
    if(b.empty()){                          //没有这个最后一例就会段错误
        printf("0 -1");
        return 0;
    }
    sort(b.begin(),b.end());                //排序后按格式输出
    printf("%d %05d\n",b.size(),a[b[0]]);
    for(int i=0;i<b.size();i++){
        if(i<b.size()-1){
            printf("%05d %d %05d\n",a[b[i]],b[i],a[b[i+1]]);
        }
        else printf("%05d %d %d\n",a[b[i]],b[i],-1);
    }
    return 0;

}

 

posted @ 2020-08-20 20:33  uy9ko  阅读(94)  评论(0)    收藏  举报