本题:我们用数组进行表达,最大的特点就是用空间换时间,可以节约时间
#include <iostream>
#include <cstring>
using namespace std;
const int N=1e5+10;
int head,idx,ne[N],e[N];//head首地址 idx头节点 ne[]尾节点 e[]结点的值
void abc(){//数据初始化
head=-1;
idx=0;
}
void aaa(int x){//表示向链表头插入一个数 x
e[idx]=x;
ne[idx]=head;
head=idx++;
}
void bbb(int k){//表示删除第 k个插入的数后面的数(当k为 0时表示删除头结点)
ne[k]=ne[ne[k]];//k位置的后面一个不是idx的,容易混淆
}
void ccc(int k,int x){//表示在第 k个插入的数后面插入一个数 x
e[idx]=x;
ne[idx]=ne[k];
ne[k]=idx++;
}
int main(){
int m;
cin>>m;
abc();
while (m -- ){
int a,b;//a表示数,b表示位置
char c;
cin>>c;
if(c=='H'){
cin>>a;
aaa(a);
}
else if(c=='D'){
cin>>b;
if(!b)head=ne[head];//考虑删除头节点
else bbb(b-1);
}
else{
cin>>b>>a;
ccc(b-1,a);
}
}
for(int i=head;i!=-1;i=ne[i]){
cout<<e[i]<<" ";
}
}