给一个链表,然后按链表里面的数据排序,重新排成一个链表。
给的数据里面有掺杂的无用节点,不能直接排序。所以要遍历一遍链表之后再排序。
#include <iostream>
#include <algorithm>
#include <climits>
#include <cstring>
#include <string>
#include <vector>
#include <map>
#include <queue>
#include <stack>
#define MAX 100010
using namespace std;
struct Node{
int now;
int data;
int next;
};
vector<Node> l;
Node org[MAX];
int n,h;
bool cmp(Node n1,Node n2){
return n1.data < n2.data;
}
int main(){
scanf("%d%d",&n,&h);
Node t;
for(int i =0 ; i < n;i++){
scanf("%d%d%d",&t.now,&t.data,&t.next);
org[t.now].now = t.now;
org[t.now].data = t.data;
org[t.now].next = t.next;
}
while(h!=-1){
l.push_back(org[h]);
h = org[h].next;
}
if(l.size() == 0){
printf("0 -1\n");
return 0;
}
sort(l.begin(),l.end(),cmp);
printf("%d %05d\n",l.size(),l[0].now);
for(int i = 0 ;i < l.size() -1 ;i++){
printf("%05d %d %05d\n",l[i].now,l[i].data,l[i+1].now);
}
printf("%05d %d -1\n",l[l.size()-1].now,l[l.size()-1].data);
return 0;
}
本文介绍了一种链表排序的方法,该方法首先遍历链表收集有效节点数据,并将其存储到一个临时容器中,随后对这些数据进行排序,最后重新构建排序后的链表。通过这种方式,即使原始链表中包含无效节点也能正确实现排序。
449

被折叠的 条评论
为什么被折叠?



