negative 负的
positive 正的
思路
这道题考察静态链表的存储和遍历。每个节点顺序的调整并非严格的排序,而且要求保证稳定,所以自己手动实现比较合适。
此外,还要考虑一种情况,如下所示,即所给的N并不一定是链表的长度。
00100 4 10
100 4 101
101 -1 -1
102 11 103
103 10 -1
代码
#include <bits/stdc++.h>
using namespace std;
const int maxn = 100002;
struct node{
int data;
int next;
}Node[maxn];
struct newnode{
int addr;
int data;
newnode(int a, int d): addr(a), data(d) {}
};
vector<newnode> ori, aft;
int fir, n, k;
int main() {
cin>>fir>>n>>k;
for (int i = 0; i < n; i++) {
int addr;
cin>>addr;
cin>>Node[addr].data;
cin>>Node[addr].next;
}
int f = fir;
while (f != -1) {
ori.push_back(newnode(f, Node[f].data));
f = Node[f].next;
}
for (int i = 0; i < ori.size(); i++) {
if (ori[i].data < 0) aft.push_back(ori[i]);
}
for (int i = 0; i < ori.size(); i++) {
if (ori[i].data <= k && ori[i].data >= 0) aft.push_back(ori[i]);
}
for (int i = 0; i < ori.size(); i++) {
if (ori[i].data > k) aft.push_back(ori[i]);
}
for (int i = 0; i < ori.size(); i++) {
printf("%05d %d ",aft[i].addr, aft[i].data);
if (i != ori.size() - 1) printf("%05d\n", aft[i+1].addr);
else printf("-1\n");
}
}