AcWing 827. 双链表
原题链接
简单
作者:
Value
,
2021-03-20 14:53:31
,
所有人可见
,
阅读 266
#include <iostream>
#include <cstdio>
using namespace std;
const int N = 1E5 + 10;
int l[N], r[N], e[N], idx;
void init(){
r[0] = 1, l[1] = 0;
idx = 2;
}
void insertR(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 k){
r[l[k]] = r[k];
l[r[k]] = l[k];
}
int main(){
init();
int n; scanf("%d", &n);
while(n -- ){
string s; cin >> s;
int t; scanf("%d", &t);
if(s == "L") insertR(0, t);
else if(s == "R") insertR(l[1], t);
else if(s == "D") remove(t + 1);
else if(s == "IL"){
int x; scanf("%d", &x);
insertR(l[t + 1], x);
}else{
int x; scanf("%d", &x);
insertR(t + 1, x);
}
}
for(int i = r[0]; i != 1; i = r[i]) cout << e[i] << ' ';
return 0;
}