这道题其实不难,不妨定义一个结构体数组,把下标当作链表地址,每个结构体里面存放当前地址,下一个节点地址,以及数据,然后遍历整条链表,把遍历过程中链表的每一个节点都放在vector中,最后按照题目要求输出即可。

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
struct node{
	int add;
	int data;
	int next;
}l[100005];
vector<node> v;
int main()
{
	int L,n;
	cin>>L>>n;
	for(int i=0;i<n;i++)
	{
		int a,b,c;
		scanf("%d%d%d",&a,&b,&c);
		l[a].add=a;
		l[a].data=b;
		l[a].next=c;
	}
	while(L!=-1)
	{
		v.push_back(l[L]);
		L=l[L].next;
	}
	int l=0,r=v.size()-1;
	int cnt=0;
	while(1)
	{
		if(cnt+1==v.size())
		{
			printf("%05d %d -1\n",v[r].add,v[r].data,v[l].add);
			break;
		}
		printf("%05d %d %05d\n",v[r].add,v[r].data,v[l].add);
		cnt++;
		if(cnt+1==v.size())
		{
			printf("%05d %d -1\n",v[l].add,v[l].data);
			break;
		}
		printf("%05d %d %05d\n",v[l].add,v[l].data,v[r-1].add);
		cnt++;
		l++;r--;
	}
}