因为发现有了adress,使用adress进行链表链接不方便,参考了网上使用数组的方法。
认真读题,每K个元素就要置逆一次
#include<iostream>
#include<stdio.h>
using namespace std;
#define MAXSIZE 100000
struct node
{
int data;
int next;
}node[MAXSIZE];
int List[MAXSIZE];
int main()
{
int head,N,K;
cin>>head>>N>>K;
int address,data,next;
int i;
for( i=0;i<N;i++)
{
cin>>address>>data>>next;
node[address].data=data;
node[address].next=next;
}
int j=0;
int p=head;
while(p!=-1)
{
List[j++]=p;
p=node[p].next;
}
int left;
int right;
int exchange;
int m=0;
while(m+K<=j)
{
left=m;
right=m+K-1;
while(left<right)
{
exchange=List[left];
List[left]=List[right];
List[right]=exchange;
left++;
right--;
}
m=m+K;
}
i=0;
for(;i<j-1;i++)
{
printf("%05d %d %05d\n",List[i],node[List[i]].data,List[i+1]);
}
printf("%05d %d -1\n",List[i],node[List[i]].data);
return 0;
}