1074. Reversing Linked List (25)
#include <stdio.h>
struct node{
int address;
int data;
int next;
}node[100001];
struct node *stack[100001];
struct node *queue[100001];
int top,front,rear;
int main(){
int head,n,k;
scanf("%d %d %d",&head,&n,&k);
while(n--){
int add,d,nextadd;
scanf("%d %d %d",&add,&d,&nextadd);
node[add].address=add;
node[add].data=d;
node[add].next=nextadd;
}
int x=head,cur=head,tag=0;
while(x!=-1){
cur=x;
for(int i=0;i<k;i++){
if(x==-1){
tag=1;break;
}
stack[top++]=&node[x];
x=node[x].next;
}
if(tag)break;
for(int i=0;i<k;i++)
queue[rear++]=stack[--top];
}
while(tag&&cur!=-1){
queue[rear++]=&node[cur];
cur=node[cur].next;
}
while(front<rear-1){
printf("%05d %d %05d\n",queue[front]->address,queue[front]->data,queue[front+1]->address);
++front;
}
printf("%05d %d -1\n",queue[rear-1]->address,queue[rear-1]->data);
return 0;
}