#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1e5 + 10;
int head, e[N], ne[N], idx;
inline void init ()
{
head = -1, idx = 0;
}
inline void add_to_head (int x)
{
e[idx] = x, ne[idx] = head, head = idx++;
}
inline void add (int k, int x)
{
e[idx] = x, ne[idx] = ne[k], ne[k] = idx++;
}
inline void remove (int k)
{
ne[k] = ne[ne[k]];
}
int main()
{
int n;
scanf ("%d", &n);
init();
while (n--)
{
int k, x;
char opt;
cin >> opt;
if (opt == 'I')
{
scanf ("%d %d", &k, &x);
add (k - 1, x);
}
if (opt == 'H')
{
scanf ("%d", &x);
add_to_head (x);
}
if (opt == 'D')
{
scanf ("%d", &k);
if (!k) head = ne[head];
else remove (k - 1);
}
}
for (int i = head; i != -1; i = ne[i]) printf ("%d ", e[i]);
return 0;
}
单链表是一种简单的线性表,以下是他的基本功能:
init:初始化链表
add_to_head:在链表头部插入元素
add:在列表任意位置插入元素
remove:删除元素
在以上题目中,我们使用数组来模拟链表。