板子:
int head,e[N],ne[N],idx,n;//head记录头结点位置,e[]记录值,ne[]记录下个节点,idx记录现在数组可用位置
void init(){//初始化
head=-1;
idx=0;
}
void InsertHead(int x){//在头部插入
e[idx]=x, ne[idx]=head,head=idx++;
}
void Delete(int k){//删除第k个节点后的一个节点
if(k==0) head=ne[head];
else ne[k-1]=ne[ne[k-1]];//因为idx是从0开始所以第k个是k-1位置
}
void Insert(int k,int x){//在第k个节点后面插入一个节点
e[idx]=x,ne[idx]=ne[k-1],ne[k-1]=idx++;//因为idx是从0开始所以第k个是k-1位置
} 所有代码:
#include <bits/stdc++.h>
using namespace std;
const int N=100005;
int head,e[N],ne[N],idx,n;//head记录头结点位置,e[]记录值,ne[]记录下个节点,idx记录现在数组可用位置
char op[3];
int k,x;
void init(){//初始化
head=-1;
idx=0;
}
void InsertHead(int x){//在头部插入
e[idx]=x, ne[idx]=head,head=idx++;
}
void Delete(int k){//删除第k个节点后的一个节点
if(k==0) head=ne[head];
else ne[k-1]=ne[ne[k-1]];//因为idx是从0开始所以第k个是k-1位置
}
void Insert(int k,int x){//在第k个节点后面插入一个节点
e[idx]=x,ne[idx]=ne[k-1],ne[k-1]=idx++;//因为idx是从0开始所以第k个是k-1位置
}
int main(int argc, char** argv) {
cin>>n;
init();
for(int i=0;i<n;i++){
scanf("%s",op);
if(op[0]=='H') scanf("%d",&x),InsertHead(x);
else if(op[0]=='D') {
scanf("%d",&k);
Delete(k);
}else{
scanf("%d%d",&k,&x);
Insert(k,x);
}
}
for(int i=head;i!=-1;i=ne[i]) cout<<e[i]<<" ";
cout<<endl;
return 0;
} 
京公网安备 11010502036488号