数组模拟单链表(可怕的素质)
可怕的素质 (100 分)
亚克星球上的人的素质跟我们福大人比起来,可以说是一个天上,一个地下了。他们去食堂吃饭的时候,很多人都不好好的排队,而是排在某个熟人的后面,或者直接就插到队伍的最前面。这让食堂的工作人员很是恼火。
输入格式:
第一行包含一个整数n(0<n<1000),表示有n个亚克星球上的人去食堂吃饭。
接下来n行,每行1个整数x,表示第i( i从1~n )个人排在了x的后面,当x为0时,表示第i个人排在了最前面。
输出格式:
输出仅一行,包括n个数,以空格作为分隔符,最后一个数的后面没有空格。表示这n个人最后是排成了怎样的队伍。
输入样例:
0
0
2
输出样例:
2 3 1
思路
用idx表示插入链表的顺序,第i个人排在x后面即将i插入到下标是x-1到数的后面(idx从0开始而x从1开始),如果x=0,即插到表头。
代码实现(c++)
using namespace std;
const int N = 1010;
int n,head,idx,e[N],ne[N];
void init(){
head = -1;
idx = 0;
}
void add_to_head(int x){
e[idx] = x;
ne[idx] = head;
head = idx ++;
}
void add(int k, int x){
e[idx] = x;
ne[idx] = ne[k];
ne[k] = idx ++;
}
int main(){
cin >> n;
init();
int k;
for(int i = 1; i <=n; i ++){
cin >> k;
if(!k) add_to_head(i);
else add(k - 1,i);
}
for(int i = head; i != -1; i = ne[i]){
cout << e[i] << ' ';
}
return 0;
}```
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】博客园携手 AI 驱动开发工具商 Chat2DB 推出联合终身会员
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步