分析:注意是每 k 位进行反转,而不是前 k 位。
#include<bits/stdc++.h>
using namespace std;
int main(){
int begin,n,k;
cin>>begin>>n>>k;
int data[100000],next[100000]; //data[i]用于存储地址为i的结点的值,next[i]存储下一个结点的地址
for(int i=0;i<n;i++){
int address;
cin>>address;
cin>>data[address]>>next[address];
}
vector<int> list; //存储链表结点地址
while(begin!=-1){
list.push_back(begin);
begin=next[begin];
}
for(int i=k;i<=list.size();i+=k) //进行翻转
reverse(list.begin()+i-k,list.begin()+i);
for(int i=0;i<list.size()-1;i++) //输出
printf("%05d %d %05d\n",list[i],data[list[i]],list[i+1]);
printf("%05d %d -1\n",list.back(),data[list.back()]);
return 0;
}