输入样例
00100 6
00000 4 99999
00100 1 12309
68237 6 -1
33218 3 00000
99999 5 68237
12309 2 33218
输出样例
68237 6 00100
00100 1 99999
99999 5 12309
12309 2 00000
00000 4 33218
33218 3 -1
代码
比较坑的点就是测试点3,因为有多余的结点,比如有多个结点的下一个节点都是-1,但是实际上一条链表中只有一个结点是以-1结尾的,所以我们需要在遍历的时候判断,具体看代码吧,比较简洁!
#include<bits/stdc++.h>
using namespace std;
int a[100000],b[100000]; //a来存data,b来存下一个结点
int main()
{
int st,n;
cin>>st>>n;
int ad,data,next;
for(int i=0;i<n;i++)
{
cin>>ad>>data>>next;
a[ad]=data;
b[ad]=next;
}
vector<int>v;
while(st!=-1) //找出原来的链表
{
v.push_back(st);
st=b[st];
}
n=v.size(); //实际的链表长度
if(n%2==0)
for(int i=0;i<n/2;i++)
{
printf("%05d %d %05d\n",v[n-1-i],a[v[n-1-i]],v[i]);
if(i!=n/2-1)
{
printf("%05d %d %05d\n",v[i],a[v[i]],v[n-i-2]);
}
else printf("%05d %d -1\n",v[i],a[v[i]]);
}
else
for(int i=0;i<=n/2;i++)
{
if(i!=n/2)
{
printf("%05d %d %05d\n",v[n-1-i],a[v[n-1-i]],v[i]);
printf("%05d %d %05d\n",v[i],a[v[i]],v[n-i-2]);
}
else printf("%05d %d -1\n",v[n-1-i],a[v[n-1-i]]);
}
}