PTA可怕的素质(双向链表法)

可怕的素质

亚克星球上的人的素质跟我们塞亚人比起来,可以说是一个天上,一个地下了。他们去食堂吃饭的时候,很多人都不好好的排队,而是排在某个熟人的后面,或者直接就插到队伍的最前面。这让食堂的工作人员很是恼火。

输入格式:

第一行包含一个整数n(0<n<1000),表示有n个亚克星球上的人去食堂吃饭。

接下来n行,每行1个整数x,表示第i( i从1~n )个人排在了x的后面,当x为0时,表示第i个人排在了最前面。

输出格式:

输出仅一行,包括n个数,以空格作为分隔符,最后一个数的后面没有空格。表示这n个人最后是排成了怎样的队伍。

输入样例:

3
0
0
2

输出样例:

2 3 1

#include<iostream>
#include<stdio.h>
using namespace std;
struct student{
	int before;
	int val;
	int next;
}stu[1001];
int main()
{
	int n;
	int x,head;
	cin>>n; 
	for(register int i=1;i<=n;i++)
	{
		cin>>x;
		if(x==0)
		{
			stu[i].next=head;
			head=i;
		}
		stu[i].val=i;
		stu[i].before=x;
		stu[i].next=stu[x].next;
		stu[stu[i].next].before=i;
		stu[stu[i].before].next=i;
	}
	for(register int i=head;i;i=stu[i].next)
	{
		if(i!=head) cout<<" "<<stu[i].val;
		else
		cout<<stu[i].val;
	}
	return 0;
}
原文地址:https://www.cnblogs.com/BeautifulWater/p/14508822.html