分析:将结点用li[10000]保存,li为node类型,node中保存结点的值value和它的next地址。list的下标就是结点的地址。将<0、0~k、>k三部分的结点地址分别保存在v[0]、v[1]、v[2]中,最后将vector(二维数组)中的值依次输出即可
#include<bits/stdc++.h>
using namespace std;
struct node{
int data,next;
}li[100000];
vector<int>v[3];//二维数组存储3种不同数
int main(){
int start,n,k,a;
cin>>start>>n>>k;//输入第一个结点地址、结点总个数、分界线k
for(int i=0;i<n;i++){
cin>>a;//输入每个结点地址
cin>>li[a].data>>li[a].next;//输入该结点的值、下一个结点的地址
}
while(start!=-1){
if(li[start].data<0)
v[0].push_back(start);
else if(li[start].data>=0&&li[start].data<=k)
v[1].push_back(start);
else
v[2].push_back(start);
start=li[start].next;
}
int flag=0;
for(int i=0;i<3;i++){
for(int j=0;j<v[i].size();j++){
if(flag==0){
printf("%05d %d ",v[i][j],li[v[i][j]].data);
flag=1;//第一行输入完毕
}
else{
printf("%05d\n%05d %d ",v[i][j],v[i][j],li[v[i][j]].data);//输入上一行最后一个地址、本行首地址、......
}
}
}
printf("-1");
return 0;
}