5.18–Acwing 826 数组单链表模拟
题目连接:https://www.acwing.com/problem/content/828/
//模板详解
#include<cstdio>
#include<iostream>
using namespace std;
int head,e[100000],ne[100000],idx;
//数组来模拟单链表 我终于听懂了
//实际上这里是模拟不带头结点的链表
//head指的是头指针
//idx实际上是指的是下一个可以使用的下标位置
//初始化链表
void init()
{
head=-1;
idx=0;
}
//插入 头插法
//将数x插入到头结点的位置(也就是第一个结点的位置)
void add_tohead(int x)
{
e[idx]=x,ne[idx]=head,head=idx++;
}
//普通插入,在下标为K的位置后面插入值为x的结点
void add(int k,int x){
e[idx]=x,ne[idx]=ne[k],ne[k]=idx++;;
}
//普通删除,将下标为K的位置后面的数删除
void remove(int k){
ne[k]=ne[ne[k]];
}
int main()
{
int m;
init();//自己模拟时当时一直显示运行超时,原来是自己一直没有初始化
cin>>m;
while(m--)
{
char op;
int k,x;
cin>>op;
if(op=='H')
{
cin>>x;
add_tohead(x);
}
else if(op=='D')
{
cin>>k;
if(k==0)
{
head=ne[head];
}
else
remove(k-1);
}
else
{
cin>>k>>x;
add(k-1,x);
}
}
for (int i = head; i != -1; i = ne[i]) cout << e[i] << ' ' ;
cout << endl;
}