Note
- 链表
- 用有效链表的长度判断需要逆转的部分,不能用n!!!
Code
#include<bits/stdc++.h>
using namespace std;
struct Node{
int address,key,next;
}node[100005];
int main(){
#ifndef ONLINE_JUDGE
freopen("data.txt","r",stdin);
#endif
int address,n,k;
cin>>address>>n>>k;
int data,add1,add2,cnt=0;
vector<int> vc;
for(int j=0;j<n;j++){
scanf("%05d %d %05d",&add1,&data,&add2);
node[add1].address=add1;
node[add1].key=data;
node[add1].next=add2;
}
while(address!=-1){
vc.push_back(address);
address=node[address].next;
cnt++;
}
vector<int> v;
if(k!=0){
int group=cnt/k;
for(int j=1;j<=group;j++)
for(int i=j*k-1;i>=(j-1)*k;i--)
v.push_back(vc[i]);
if(cnt%k!=0)
for(int j=k*group;j<cnt;j++)
v.push_back(vc[j]);
}
else v=vc;
for(int i=0;i<v.size();i++){
printf("%05d %d ",node[v[i]].address,node[v[i]].key);
if(i!=v.size()-1) printf("%05d\n",node[v[i+1]].address);
else printf("-1\n");
}
return 0;
}