链表排序题。用sort会出错,想让两个元素不进行比较维持原序列的顺序时,sort达不到目的。
注意res2.size() == 0但是res3.size()不是0的情况。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int SIZE = 10000005;
struct Lnode {
int address;
int data;
int next;
} nodes[SIZE];
int K;
/*看一下网上的题解*/
int main() {
int start, N;
int address, data, next;
scanf("%d %d %d", &start, &N, &K);
vector<Lnode> res1;
vector<Lnode> res2;
vector<Lnode> res3;
vector<Lnode> res;
for (int i = 0; i < N; i ++) {
scanf("%d %d %d", &address, &data, &next);
nodes[address].address = address;
nodes[address].data = data;
nodes[address].next = next;
}
while (start != -1) {
if (nodes[start].data < 0) res1.push_back(nodes[start]);
else if (nodes[start].data >= 0 && nodes[start].data <= K) res2.push_back(nodes[start]);
else res3.push_back(nodes[start]);
start = nodes[start].next;
}
for (int i = 0; i < res1.size(); i ++) res.push_back(res1[i]);
for (int i = 0; i < res2.size(); i ++) res.push_back(res2[i]);
for (int i = 0; i < res3.size(); i ++) res.push_back(res3[i]);
for (int i = 0; i < res.size(); i ++) {
if (i != res.size() - 1) printf("%05d %d %05d\n", res[i].address, res[i].data, res[i + 1].address);
else printf("%05d %d -1\n", res[i].address, res[i].data);
}
return 0;
}