/关于问题的解答:
当头节点为r[0]而不是0时,代入add,会出现r[r[0]]的情况,这并不是我们想要的结果,只有为0时满足题意
同理当尾节点为1而不是l[1]时,代入add,会出现r[1]越界的情况,只有l[1]满足条件/
//从特殊到一般,其实就是y总在处理k在右边插入,在左边插入k的传参不同,一个为k + 1,另一个为l[k + 1]
include [HTML_REMOVED]
using namespace std;
const int N = 100010;
int e[N],l[N],r[N],idx;
int n,x,k;
string s;
void init()
{
l[1] = 0;//初始化首尾节点
r[0] = 1;//不是不可以存数吗?
idx = 2;//那为什么从最左边存储是从0(0不就是头节点吗?)开始?
}
void add(int k,int x)//以添加的数在k的右边为例
{
e[idx] = x;
r[idx] = r[k];
l[idx] = l[r[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()
{
cin >> n;
init();
while( n – )
{
cin >> s;
if(s == “L”)
{
cin >> x;
add(0,x);//关于为什么是0,不是r[0]???
}
else if(s == “R”)
{
cin >> x;
add(l[1],x);
}
else if(s == “D”)
{
cin >> k;
remove(k + 1);
}
else if(s == “IL”)
{
cin >> k >> x;
add(l[k + 1],x);
}
else if(s == “IR”)
{
cin >> k >> x;
add(k + 1,x);
}
}
for(int i = r[0];i != 1;i = r[i]) cout << e[i] << ‘ ‘;
return 0;
}