题目介绍
题意:给定一个链表,和头结点,输出这个链表按照权值排序后形成的新链表
坑 : 给的所有输入,并不保证都是原来链表的元素;所以需要按照原来的序列走一遍
思路: 按照原来链表走一遍,得到链表内元素,排序后输出
代码
#include<bits/stdc++.h>
using namespace std;
const int N= 1e5+5;
//链表处理
//坑 : 不是每个节点都在原来的链表中 以及空链表
struct node{
int ind,key,nex;
friend bool operator < (node a,node b){
return a.key<b.key;
}
};
node lis[N];
int main(){
int n,st;
cin>>n>>st;
for(int i=1;i<=n;++i){
int add,key,nex;
cin>>add>>key>>nex;
lis[add].ind = add;
lis[add].key = key;
lis[add].nex = nex;
}
vector<node>now;
while(st!=-1){
now.push_back( node{lis[st].ind,lis[st].key,lis[st].nex});
st =lis[st].nex;
}
sort(now.begin(),now.end());
if(now.size())
printf("%d %05d\n",now.size(),now[0].ind);
else printf("0 -1\n");//空链表
for(int i=0;i<now.size();++i){
if(i!=now.size()-1)
printf("%05d %d %05d\n",now[i].ind,now[i].key,now[i+1].ind);
else printf("%05d %d %d\n",now[i].ind,now[i].key,-1);
}
return 0;
}