#include <stdio.h>
#define N 100010
int e[N],ne[N],head,index;//e[n]数组存储数据(value) ne[n]数据相当于指针(next)
//初始化
void init()
{
head = -1;
index = 0;
}
//向链表头插入一个数
void add(int x)
{
e[index] = x;
ne[index] = head;
head = index;
index++;
}
//在第 k 个插入的数后插入一个数
void addsub(int k,int x)
{
e[index] = x;
ne[index] = ne[k - 1];
ne[k - 1] = index;
index++;
}
//删除第 k 个插入的数后面的数;(当 k 为 0 时,表示删除头结点)
void delect(int k)
{
ne[k] = ne[ne[k]];
}
//字符是H则是add(int x) I则是add(int k,int x) D则是remove(int k)
int main ()
{
int n;//进行n次操作
int x,k;
char c;
scanf ("%d",&n);
init();
while (n--)
{
scanf (" %c",&c);
if (c == 'H')
{
scanf ("%d",&x);
add(x);
}
else if(c == 'I')
{
scanf ("%d%d",&k,&x);
addsub(k,x);
}
else
{
scanf ("%d",&k);
if (k == 0)
{
head = ne[head];
}
else
{
delect(k - 1);
}
}
}
int i = 0;
for (i = head;i != -1;i = ne[i])
{
printf ("%d ",e[i]);
}
return 0;
}
附上代码结果