使用栈进行块翻转。
输出的时候:输出结点的下一个地址,在输出下一个结点时输出。
#include<iostream>
#include<algorithm>
#include<stack>
using namespace std;
struct Node{
int value;
int next=-1;
};
struct Node node[100005];
int main(){
int head,n,m;
cin>>head>>n>>m;
for(int i=0;i<n;i++){
int cur,value,next;
cin>>cur>>value>>next;
node[cur].value=value;
node[cur].next=next;
}
int t=head;
stack<int> ans,tmp;
while(t!=-1){
tmp.push(t);
t=node[t].next;
if(tmp.size()==m||t==-1){
while(!tmp.empty()){
ans.push(tmp.top());
tmp.pop();
}
}
}
int id=ans.top();
printf("%05d %d ",id,node[id].value);
ans.pop();
while(!ans.empty()){
int id=ans.top();
ans.pop();
printf("%05d\n",id);
printf("%05d %d ",id,node[id].value);
}
printf("-1");
return 0;
}