单链表:
#include <bits/stdc++.h>
using namespace std;
int head=-1,idx=0,e[100005],ne[100005];
void add_head(int x)
{
e[idx]=x;
ne[idx]=head;
head=idx;
idx++;
}
void remove(int k)
{
if(k==0) head=ne[head];
else ne[k-1]=ne[ne[k-1]];
}
void add(int k,int x)
{
e[idx]=x;
ne[idx]=ne[k-1];
ne[k-1]=idx;
idx++;
}
int main()
{
long long m;
cin>>m;
while(m--)
{
string a;
cin>>a;
if(a=="H") //头部插入元素
{
int x;
cin>>x;
add_head(x);
}
else if(a=="D")//删除元素
{
int k;
cin>>k;
remove(k);
}
else //在第k个数后面插入一个数
{
int k,x;
cin>>k>>x;
add(k,x);
}
}
for(int i=head;i!=-1;i=ne[i])
{
cout<<e[i]<<" ";
}
cout<<endl;
return 0;
}
双链表:
#include <bits/stdc++.h>
using namespace std;
int idx,e[100005],r[100005],l[100005];
void remove(int k)
{
l[r[k]]=l[k];
r[l[k]]=r[k];
}
//右边插入
//k-1
void add(int k,int x)
{
e[idx]=x;
r[idx]=r[k];
l[idx]=k;
l[r[k]]=idx;
r[k]=idx;
idx++;
}
//最右边插入 1
void add_head1(int x)
{
e[idx]=x;
r[idx]=1;
l[idx]=l[1];
r[l[1]]=idx;
l[1]=idx;
idx++;
}
//最左边插入 0
void add_head0(int x)
{
e[idx]=x;
r[idx]=r[0];
l[idx]=0;
l[r[0]]=idx;
r[0]=idx;
idx++;
}
int main()
{
r[0]=1,l[1]=0,idx=2;
long long m;
cin>>m;
while(m--)
{
string a;
cin>>a;
if(a=="IR") //表示在第k个插入的数右侧插入一个数
{
int x,k;
cin>>k>>x;
add(k+1,x);
}
else if(a=="IL")//表示在第k个插入的数左侧插入一个数
{
int k,x;
cin>>k>>x;
add(l[k+1],x);
}
else if(a=="D")//表示将第k个插入的数删除
{
int k;
cin>>k;
remove(k+1);
}
else if(a=="R")//表示在链表的最右端插入数x
{
int x;
cin>>x;
add_head1(x);
}
else//表示在链表的最左端插入数x
{
int x;
cin>>x;
add_head0(x);
}
}
for(int i=r[0];i!=1;i=r[i])
{
cout<<e[i]<<" ";
}
cout<<endl;
return 0;
}