参考地址
注意一点:
给的节点有的可能不在链表中
测试的最后一个点就是卡的这个
#include<bits/stdc++.h>
#include<vector>
using namespace std;
struct Nod{
int addr;
int value;
int next;
};
vector<Nod> v(100005);
int main(){
int start,k,n;
while(scanf("%d %d %d",&start,&n,&k)!=EOF){
for(int i=0;i<n;i++){
Nod temp;
scanf("%d %d %d",&temp.addr,&temp.value,&temp.next);
v[temp.addr]=temp;
}
if(start==-1)printf("-1\n");
else{
vector<Nod>v2;
while(start!=-1){ //这里判断必须是这样,不能用节点数是否等于n来判断,因为可能有节点不在链表里面
v2.push_back(v[start]);
start=v[start].next;
}
vector<Nod>v3;
for(int i=k;i<=v2.size();i+=k)
for(int j=i-1;j>=i-k;j--)
v3.push_back(v2[j]);
for(int i=v2.size()-v2.size()%k;i<v2.size();i++)
v3.push_back(v2[i]);
for(int i=0;i<v3.size()-1;i++)
v3[i].next=v3[i+1].addr;
v3[v3.size()-1].next=-1;
for(int i=0;i<v3.size()-1;i++)
printf("%05d %d %05d\n",v3[i].addr,v3[i].value,v3[i].next);
int i=v3.size()-1;
printf("%05d %d %d\n",v3[i].addr,v3[i].value,v3[i].next);
}
}
return 0;
}