一、题干:acwing双链表
二、代码实现
#include<iostream>
using namespace std;
const int N = 1e5 + 10;
int n[N],l[N],r[N],idx;
//初始化
void init()
{
idx = 2 ,r[0] = 1 ,l[1] = 0;
}
//在k结点的右边插入元素x
void add(int k,int x)
{
n[idx] = x;
l[idx] = k;
r[idx] = r[k];
l[r[k]] = idx;
r[k] = idx;
idx ++;
}
//删除k结点
void remove(int k)
{
r[l[k]] = r[k];
l[r[k]] = l[k];
}
int main()
{
init();
int m;
cin>>m;
while(m--)
{
string op;
int k,x;
cin>>op;
if(op == "L")
{
cin>>x;
add(0,x);//在头结点右侧插入元素x
}
else if(op == "R")
{
cin>>x;
add(l[1],x);//在尾结点的左结点右侧插入元素x
}
else if(op == "D")
{
cin>>k;
remove(k+1);//删除第k个插入的元素
}
else if(op == "IL")
{
cin>>k>>x;
add(l[k+1],x);//在第k个插入的结点的左结点右侧插入元素x
}
else if(op == "IR")
{
cin>>k>>x;
add(k+1,x);//在第k个插入的结点右侧插入元素x
}
}
for (int i = r[0]; i != 1; i = r[i]) cout<<n[i]<<' ';
return 0;
}