双向链表(初始化要在main()函数里面调用)
作者:
Oct_9
,
2024-04-11 18:22:54
,
所有人可见
,
阅读 12
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 100010;
int e[N], l[N], r[N];
int idx;
void init() //初始化不光要写,更要在主函数里面调用
{
idx = 2;
r[0] = 1, l[1] = 0;
}
void add(int k, int x)
{
e[idx] = x;
r[idx] = r[k];
l[idx] = k;
l[r[k]] = idx;
r[k] = idx;
idx ++;
}
void remove(int i)
{
r[l[i]] = r[i];
l[r[i]] = l[i];
}
int main()
{
int M;
scanf("%d", &M);
init(); // 最坑人的就是这一步;
char op[3];
int x, k;
while (M --)
{
scanf("%s", &op);
switch (op[0])
{
case 'L':
scanf("%d", &x);
add(0, x);
break;
case 'R':
scanf("%d", &x);
add(l[1], x);
break;
case 'D':
scanf("%d", &k);
remove(k + 1);
break;
case 'I':
if (op[1] == 'L')
{
scanf("%d%d", &k, &x);
add(l[k + 1], x);
}
else
{
scanf("%d%d", &k, &x);
add(k + 1, x);
}
}
}
for (int i = r[0]; i != 1; i = r[i])
printf("%d ", e[i]);
return 0;
}