AC代码:
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 100010;
int n;
int head,e[N],ne[N],idx;
void add_to_head(int x)
{
e[idx]=x;
ne[idx]=head;
head=idx;
idx++;
}
void remove(int k)
{
ne[k]=ne[ne[k]];
}
void add(int k,int x)
{
e[idx]=x;
ne[idx]=ne[k];
ne[k]=idx;
idx++;
}
int main()
{
head=-1;
cin>>n;
while(n--)
{
int x,k;
char op;
cin>>op;
if(op=='H')
{
cin>>x;
add_to_head(x);
}
else if(op=='D')
{
cin>>k;
if(k==0)head=ne[head];
else
remove(k-1);
}
else
{
cin>>k>>x;
//表示在第 k个插入的数后面插入一个数 x
add(k-1,x);
}
}
for(int i=head;i!=-1;i=ne[i])
cout<<e[i]<<' ';
return 0;
}
相关解释:
这里要初始化,head=-1;注意这里头指针就是静态链表的第一个元素,而不是head头指针。因为我们插入一个元素,idx++。所以第k个插入的元素就是e[k-1]。这里还要注意的是,单链表的话,在最前面插入一个元素,要用add_to_head函数,要和add分开。