首先进行链表的处理,建立起一个正常的链表。
接着用vector容器进行反转,其最后不足m的不进行反转,并且最后要针对其next是否为-1进行判断输出。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int maxn=100010;
struct node{
int data,address,next;
}list[maxn];
vector<node>ans;
void init()
{
for(int i=0;i<maxn;i++)
list[i].next=i;
}
int main()
{
int begin,data,address,next;
int n,m;
init();
scanf("%d%d%d",&begin,&n,&m);
for(int i=0;i<n;i++)
{
scanf("%d",&address);
scanf("%d%d",&list[address].data,&list[address].next);
list[address].address=address;
}
next=begin;
while(next!=-1)
{
ans.push_back(list[next]);
next=list[next].next;
}
int group=ans.size()/m;
for(int i=0;i<group;i++)
{
reverse(ans.begin()+i*m,ans.begin()+i*m+m);
}
for(int i=0;i<ans.size();i++)
{
printf("%05d %d ", ans[i].address, ans[i].data);
if (i != ans.size() - 1)
printf("%05d", ans[i + 1].address);
else
printf("-1");
printf("\n");
}
return 0;
}