版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Nightmare_ak/article/details/84342964
把链表按顺序存下来之后,每k个反转一次,输出的时候,下一个节点的地址就是当前节点的next
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=1e6+5;
struct Node
{
int now,val,nxt;
}node[N],newnode[N];
int main()
{
int head,n,k;
scanf("%d%d%d",&head,&n,&k);
for(int i=1;i<=n;i++)
{
int x;scanf("%d",&x);
scanf("%d%d",&node[x].val,&node[x].nxt);
node[x].now=x;
}
int cnt=0;
for(int i=head;i!=-1;i=node[i].nxt)
newnode[++cnt]=node[i];
for(int i=1;i<=cnt;i+=k)
{
if(i+k>cnt+1) break;
reverse(newnode+i,newnode+i+k);
}
for(int i=1;i<cnt;i++)
printf("%05d %d %05d\n",newnode[i].now,newnode[i].val,newnode[i+1].now);
printf("%05d %d %d\n",newnode[cnt].now,newnode[cnt].val,-1);
return 0;
}