跟前面的链表去重一样最后一个测试数据见我前面的博文
#include <iostream>
#include <map>
using namespace std;
map<int,int> mp;
const int MAXN=111111;
int num[MAXN];
struct node
{
int x,y,z;
}nd[MAXN],nd1[MAXN];
int main()
{
int st,n;
cin>>st>>n;
for(int i=0;i<n;i++)
{
int x,y,z;
cin>>x>>y>>z;
mp[x]=z;
num[x]=y;
}
int cont1=0;
for(int i=0;i<n;i++)
{
nd[cont1].x=st;
nd[cont1].y=num[st];
nd[cont1].z=mp[st];
if(nd[cont1].z==-1)
{
cont1++;
break;
}
cont1++;
st=mp[st];
}
// for(int i=0;i<n;i++)
// cout<<nd[i].x<<" "<<nd[i].y<<" "<<nd[i].z<<endl;
int l=0,r=cont1-1;
int cont=0;
while(l<r)
{
nd1[cont++]=nd[r];
nd1[cont++]=nd[l];
l++,r--;
}
if(l==r)
nd1[cont++]=nd[l];
for(int i=0;i<cont-1;i++)
nd1[i].z=nd1[i+1].x;
nd1[cont-1].z=-1;
for(int i=0;i<cont;i++)
{
printf("%05d %d",nd1[i].x,nd1[i].y);
nd1[i].z==-1?printf(" -1\n"):printf(" %05d\n",nd1[i].z);
}
return 0;
}