题目链接 Acwing 826单链表
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
//head表示头结点的下标,e[i]表示节点i的值,ne[i]表示节点i的下一个的位置,index表示正在用哪个点
int e[N] , ne[N] , head , idx;
//初始化
void init()
{
head = -1; //head指向空节点
idx = 0; //从第一个点开始用
}
//将x插入头结点
void add_to_head(int x)
{
e[idx] = x;
ne[idx] = head;
head = idx ;
idx++;
}
//将x插到下标是k的点的后面
void add(int k,int x)
{
e[idx] = x;
ne[idx] = ne[k];
ne[k] = idx;
idx++;
}
//删除下标为k后面的节点
void remove(int k)
{
ne[k] = ne[ne[k]];
}
int main ()
{
init();
int m;
cin>>m;
while (m--)
{
int k,x;
char op;
cin>>op;
if (op=='H')
{
cin>>x;
add_to_head(x);
}
else if (op=='D')
{
cin>>k;
if (!k) head = ne[head];
remove(k-1);
}
else
{
cin>>k>>x;
add(k-1,x);
}
}
for (int i = head ; i != -1 ; i = ne[i]) cout<<e[i]<<' '; //-1表示尾节点
return 0;
}