#include<iostream>
using namespace std;
const int N = 1e5+10;
int ne[N]; //存放当前节点下标的下一个位置的下标
int e[N]; //存放每个节点的数据
int idx; //存储当前已经用到了那个节点
int head; //表示头结点的下标
void Init()
{
head = -1;
idx = 0;
}
void add_to_head(int x)
{
e[idx] = x;
ne[idx] = head;
head = idx ++;
//idx++;
}
//插入到第k个节点后边
void add(int k,int x)
{
e[idx] = x;
ne[idx] = ne[k];
ne[k] = idx ++;
//idx++;
}
//删除第k各节点的下一个节点
void remove(int k)
{
ne[k] = ne[ne[k]];
}
int main(void)
{
int m;
cin>>m;
Init();
while(m--){
char op[2];
cin>>op;
int k,x;
if(op[0] ==‘H‘){
cin>>x;
add_to_head(x);
}
else if(op[0] ==‘D‘){
cin>>k;
if(!k) head = ne[head];
else remove(k-1);
}else{
cin>>k>>x;
add(k-1,x);
}
}
for(int i= head;i!=-1;i=ne[i]) cout<<e[i]<<‘ ‘;
cout<<endl;
return 0;
}
原文:https://www.cnblogs.com/acm-walker/p/13941219.html