把head,en[N]看成指针感觉会舒服很多。
#include<algorithm>
#include<iostream>
using namespace std;
const int N=1e5+10;
int head,idx,e[N],ne[N];
void init()//初始化,head一开始指向-1
{
idx=0;
head=-1;
}
void add_to_head(int x)//向头插入节点
{
ne[idx]=head;//第idx号节点的指针指向head指向的节点
e[idx]=x;
head=idx++;//将头指针指向新插入的节点
}
void add(int k,int x)//将x插入到k后
{
e[idx]=x;
ne[idx]=ne[k];//idx号节点的ne指向k号节点的ne
ne[k]=idx++;
}
void remove(int k)//删除k后面的
{
ne[k]=ne[ne[k]];//k的ne直接指向k的ne号节点的ne号节点
}
int main()
{
int n;
cin>>n;
init();
while(n--)
{
char op;
int x;
cin>>op;
if(op=='H')
{
cin>>x;
add_to_head(x);
}
else if(op=='D')
{
int k;
cin>>k;
if(!k) head=ne[head];
remove(k-1);//因为是删除第k个数,所以编号为k-1
}
else
{
int k;
cin>>k>>x;
add(k-1,x);
}
}
for(int i=head;i!=-1;i=ne[i])
{
cout<<e[i]<<" ";
}
cout<<endl;
return 0;
}
Acwing 826单链表
最新推荐文章于 2024-02-05 20:16:46 发布