我就按照题目意思,先用结构体记录链表,然后遍历短的(go1函数)(先从b1跑一遍,如果记录下的数量>N/2,说明b1开始的是长的,那么就重新跑a1),记录下短的地址顺序,再去跑长的,边跑边记录并插入短的(go函数)
最后按照格式输出
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int a1,b1,N;
struct node{
int num,next;
}Node[100000];
vector<int> Short,ans;
void go1(int index){
if(index==-1) return;
Short.push_back(index);
go1(Node[index].next);
return;
}
void go(int index){
if(index==-1) return;
ans.push_back(index);
if(Node[index].next!=-1){
ans.push_back(Node[index].next);
}else{
return;
}
if(Short.size()!=0){
ans.push_back(Short[Short.size()-1]);
Short.pop_back();
}
go(Node[Node[index].next].next);
return;
}
int main(){
cin>>a1>>b1>>N;
for(int i=0;i<N;i++){
int index;
scanf("%d",&index);
scanf("%d %d",&Node[index].num,&Node[index].next);
}
go1(b1);
if(Short.size()>N/2){
Short.clear();
go1(a1);
go(b1);
}else{
go(a1);
}
for(int i=0;i<ans.size();i++){
if(i==0){
printf("%05d %d ",ans[0],Node[ans[0]].num);
}else{
printf("%05d\n%05d %d ",ans[i],ans[i],Node[ans[i]].num);
}
}
printf("-1\n");
return 0;
}