PAT A 1052 Linked List Sorting (25分)

北战南征 提交于 2020-01-12 15:12:17

一、思路

定义结构体node{addr, data, next};
为避免出现给定结点集合中,有非链表成员的情况,先将结点按下标存储,再按照指针遍历,同时保存链表中的结点,并对结点排序,输出;

二、代码

#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
typedef struct
{
    int addr, data, next;
}node;
int main()
{
    vector<node> l(100000), ans;
    int N, head;
    node temp;
    scanf("%d %d", &N, &head);
    for( int i = 0, addr; i < N; ++i )
    {
        scanf("%d %d %d", &temp.addr, &temp.data, &temp.next);
        l[ temp.addr ] = temp;
    }
    for( int addr = head; addr != -1; addr = l[addr].next )
        ans.push_back(l[addr]);
    sort( ans.begin(), ans.end(), [](node a, node b){ return a.data < b.data; } );
    printf("%d", ans.size());
    for( int i = 0; i < ans.size(); ++i )
        printf(" %05d\n%05d %d", ans[i].addr, ans[i].addr, ans[i].data);
    printf(" -1");
}

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!