双链表-设置虚首部虚尾部
#include<iostream>
#include<string>
using namespace std;
const int N = 100010;
int e[N], l[N], r[N], idx;
void init() {
l[1] = 0;
r[0] = 1;
idx = 2;
}
void add(int k, int x) {
e[idx] = x;
l[idx] = k;
r[idx] = r[k];
l[r[k]] = idx;
r[k] = idx;
idx ++ ;
}
void remove(int k) {
l[r[k]] = l[k];
r[l[k]] = r[k];
}
int main() {
int m;
cin >> m;
init();
while (m -- ) {
string opt;
cin >> opt;
if (opt == "L") {
int x;
cin >> x;
add(0, x);
}
if (opt == "R") {
int x;
cin >> x;
add(l[1], x);
}
if (opt == "D") {
int k;
cin >> k;
remove(k + 1);
}
if (opt == "IL") {
int k, x;
cin >> k >> x;
add(l[k + 1], x);
}
if (opt == "IR") {
int k, x;
cin >> k >> x;
add(k + 1, x);
}
}
for (int i = r[0]; i != 1; i = r[i]) cout << e[i] << " ";
}