代码1
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct Node{
int address;
int data;
int next;
};
int main(int argc, char** argv) {
vector<Node> order;
vector<Node> reverseOrder;
int zeroAddress,count,inversionAmount;
cin>>zeroAddress>>count>>inversionAmount;
Node s;
Node test[100000];
//创建节点数组
for(int i=0;i<count;i++){
cin>>s.address>>s.data>>s.next;
test[s.address]=s;
}
int nextAddress=zeroAddress;
while(nextAddress!=-1){
order.push_back(test[nextAddress]);
nextAddress=test[nextAddress].next;
}
int size=order.size();
int surplusNode=size,k=0;
//每k个节点进行反转,不足k个节点退出
while(surplusNode>=inversionAmount){
k+=inversionAmount;
for(int i=k-1;i>=k-inversionAmount;i--){
reverseOrder.push_back(order[i]);
}
surplusNode-=inversionAmount;
}
//将剩余节点添加到新的向量中
for(int i=k;i<size;i++){
reverseOrder.push_back(order[i]);
}
//修改每个节点的next值
for(int i=0;i<size;i++){
if(i==size-1){
reverseOrder[i].next=-1;
printf("%05d %d %d\n",reverseOrder[i].address,reverseOrder[i].data,reverseOrder[i].next);
}else{
reverseOrder[i].next=reverseOrder[i+1].address;
printf("%05d %d %05d\n",reverseOrder[i].address,reverseOrder[i].data,reverseOrder[i].next);
}
}
return 0;
}