题目链接
转载自https://blog.csdn.net/qq_45735810/article/details/106884432?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param
链接
AC代码
#include <iostream>
#include <vector>
using namespace std;
typedef struct {
int adr,data,next;
}NODE;
int main()
{
int head,n,k;
cin>>head>>n>>k;
NODE arr[100000]={0};
for (int i=0; i<n; ++i) {
NODE temp;
cin>>temp.adr>>temp.data>>temp.next;
arr[temp.adr]=temp;
}
vector<NODE> shunxu,fanzhuan;
int next=head;
while (next!=-1) { //建立原本的顺序的链表
shunxu.push_back(arr[next]);
next=arr[next].next;
}
int start=0;
//每k个反转一下 条件要小于实际链表大小 而不是n
while (start+k-1<shunxu.size()) {
for (int i=start+k-1; i>=start; --i)
fanzhuan.push_back(shunxu[i]);
start+=k;
}
//插入剩余未反转结点 条件要小于实际链表大小 而不是n
for (int j=start; j<shunxu.size(); ++j)
fanzhuan.push_back(shunxu[j]);
for (next=0; next<fanzhuan.size()-1; ++next)
printf("%05d %d %05d\n",fanzhuan[next].adr,fanzhuan[next].data,fanzhuan[next+1].adr);
printf("%05d %d -1\n",fanzhuan[next].adr,fanzhuan[next].data);
}