1052.Linked List Sorting

来源:互联网 发布:gpa算法 编辑:程序博客网 时间:2024/05/07 13:36
【题意】
        给出内存中一些节点的地址和内容,返回对关键字排序的链表的地址、内容及下一个内存地址

【思路】
        用一个map存储节点地址和内容的关系,然后从起始地址起遍历一遍链表节点,并将这些节点存入一个vector,最后对vector按关键字排序、输出即可

【注意点】
        1.    内存中可能会有多余的节点信息,所以需要遍历链表,只将属于链表的节点加入vector;

        2.    起始地址也可能为NULL(-1),需要特殊处理


#include <iostream>#include <vector>#include <algorithm>#include <cstdio>#include <map>using namespace std;typedef struct{int addr;int key;int nextAddr;}node;bool cmp(node n1, node n2){return n1.key<n2.key;}int main(int argc, char const *argv[]){int n,head;map<int,pair<int,int>> mm;vector<node> validList;cin >> n >> head;if(head==-1){cout << "0 -1";system("pause");return 0;}for(int i=0; i<n; i++){int addr[2],key;cin >> addr[0] >> key >> addr[1];mm[addr[0]] = pair<int,int>(key,addr[1]);}int index = head;while(index!=-1){node tmp;tmp.addr = index;tmp.key = mm[index].first;tmp.nextAddr = mm[index].second;validList.push_back(tmp);index = mm[index].second;}sort(validList.begin(),validList.end(),cmp);printf("%d %05d\n", validList.size(), validList[0].addr);for(int i=0; i<validList.size(); i++){printf("%05d %d ", validList[i].addr, validList[i].key);if(i==validList.size()-1){printf("-1\n");}else{printf("%05d\n", validList[i+1].addr);}}system("pause");return 0;}


0 0