就是把一个链表按负数,0-k , 大于k的顺序排序。
emmm 直接老办法。遍历链表的时候放到不同的vector里面去,后面倒到一起输出就好了。
#include <iostream>
#include <vector>
#include <string>
#include <cmath>
#include <climits>
#include <queue>
#include <stack>
#include <map>
#include <set>
#define MAX 100000
using namespace std;
struct node{
int add;
int data;
int next;
node(){next = -1;};
};
node list[MAX];
vector <node> neg;
vector <node> ink;
vector <node> overk;
vector <node> test;
int h,n,k;
int main(){
scanf("%d%d%d",&h,&n,&k);
for(int i = 0 ;i < n ; i++){
int add;
scanf("%d",&add);
scanf("%d%d",&list[add].data,&list[add].next);
list[add].add = add;
test.push_back(list[add]);
}
int p = h;
while(p != -1){
if(list[p].data < 0){
neg.push_back(list[p]);
}
else{
if(list[p].data <= k){
ink.push_back(list[p]);
}
else
overk.push_back(list[p]);
}
p = list[p].next;
}
for(int i = 0; i < ink.size() ;i++){
neg.push_back(ink[i]);
}
for(int i = 0; i < overk.size() ;i++){
neg.push_back(overk[i]);
}
for(int i = 0 ;i < neg.size() -1 ;i++){
printf("%05d %d %05d\n",neg[i].add,neg[i].data ,neg[i+1].add);
}
printf("%05d %d %d\n",neg[neg.size()-1].add,neg[neg.size()-1].data ,-1);
return 0;
}