PAT 1052 Linked List Sorting
这一题的意思是让给出的链表按照每个节点的值的大小排序,按照升序排,
很容易想到直接用sort依据值进行排序即可。但要注意的是给出的节点,可能不都是在一个链表上的,有可能有孤立的节点,因此我们应该先对链表进行从头到尾的遍历一遍,找到在链表上有多少个节点。
#include <iostream>
#include <limits.h>
#include <cstring>
#include <queue>
#include <unordered_map>
#include <algorithm>
#include <cmath>
#include <vector>
#include <map>
using namespace std;
int N;
int startaddress;
int endaddress;
struct node
{int address;int key;int next;
}linklist[100005];
bool cmp(node a,node b)
{if(a.key<b.key){return true;}else{return false;}
}
int main()
{//ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin>>N>>startaddress;for(int i=0;i<N;i++){int address;int key;int next;cin>>address>>key>>next;linklist[address].address=address;linklist[address].key=key;linklist[address].next=next; }vector<node> ans;while(startaddress!=-1){//startaddress=linklist[startaddress].next;ans.push_back(linklist[startaddress]);startaddress=linklist[startaddress].next;}int cnt=ans.size();if(cnt==0){printf("0 -1\n");return 0;} sort(ans.begin(),ans.end(),cmp);for(int i=0;i<cnt;i++){if(i==0){startaddress=ans[i].address;}if(i==cnt-1){ans[i].next=-1;}elseans[i].next=ans[i+1].address; }printf("%d %05d\n",cnt,startaddress);for(int i=0;i<cnt;i++){if(i==cnt-1){printf("%05d %d %d\n",ans[i].address,ans[i].key,ans[i].next); }else{printf("%05d %d %05d\n",ans[i].address,ans[i].key,ans[i].next);}//printf("%05d %d %05d\n",ans[i].address,ans[i].key,ans[i].next);}return 0;}