https://pintia.cn/problem-sets/994805260223102976/problems/994805262953594880
1.先用个数组把元素装起来
2.从单链表头开始 遍历元素 分成3组
1)负值
2)小于K
3)大于K
3.然后三个组顺序遍历输出就完事了
#include <iostream>
#include <vector>
using namespace std;
struct node{
int add, data, next;
};
vector<node> v1, v2, v3;
node N[100010];
int main(){
int S_add, n, k, sub1 = 0, sub2 = 0, sub3 = 0;
cin >> S_add >> n >> k;
for(int i = 0; i < n; i++){
int tmp1, tmp2, tmp3;
cin >> tmp1 >> tmp2 >> tmp3;
N[tmp1].add = tmp1;
N[tmp1].data = tmp2;
N[tmp1].next = tmp3;
}
//for(int i = 0; i < n; i++){
while(S_add != -1){
int tmp1, tmp2, tmp3;
tmp1 = N[S_add].add;
tmp2 = N[S_add].data;
tmp3 = N[S_add].next;
// cin >> tmp1 >> tmp2 >> tmp3;
if(tmp2 < 0){
node temp;
temp.add = tmp1;
temp.data = tmp2;
temp.next = tmp3;
v1.push_back(temp);
}
else if(tmp2 <= k){
node temp;
temp.add = tmp1;
temp.data = tmp2;
temp.next = tmp3;
v2.push_back(temp);
}
else{
node temp;
temp.add = tmp1;
temp.data = tmp2;
temp.next = tmp3;
v3.push_back(temp);
}
S_add = N[S_add].next;
}
int n2 = v2.size(), n3 = v3.size();
for(int i = 0; i < n2; i++)
v1.push_back(v2[i]);
for(int i = 0; i < n3; i++)
v1.push_back(v3[i]);
for(int i = 0; i < v1.size()-1; i++){
printf("%05d %d %05d\n", v1[i].add, v1[i].data, v1[i+1].add);
}
printf("%05d %d -1", v1[v1.size()-1].add, v1[v1.size()-1].data);
return 0;
}