题目描述
解题思路:将链表的address用map进行映射,然后对结构体根据key排序然后输出就可以了。
坑点是:有很多无效节点,需要我们首先对这个链表遍历一遍,只对在链表中的节点进行排序。另外测试点4全是无效节点,输出应该为0 -1
#include
#include
using namespace std;
const int N = 1e5+10;
struct Node{
int id,key,next;
bool operator < (const Node n) const{
if(key == n.key)
return id < n.id;
return key < n.key;
}
}m[N],res[N];
int main(){
int n,h;
scanf("%d %d",&n,&h);
for(int i = 0;i < n;i++){
int id;
cin>>id;
cin>>m[id].key>>m[id].next;
m[id].id = id;
}
int nn = 0;
while(h != -1){
res[nn++] = m[h];
h = m[h].next;
}
sort(res,res+nn);
if(nn > 0)
printf("%d %05d\n",nn,res[0].id);
else cout<<"0 -1";
for(int i = 0;i < nn-1;i++) printf("%05d %d %05d\n",res[i].id,res[i].key,res[i+1].id);
if(nn > 0)
printf("%05d %d -1\n",res[nn-1].id,res[nn-1].key);
return 0;
}