AcWing 826. 单链表
原题链接
简单
作者:
hegehog
,
2020-07-18 09:57:23
,
所有人可见
,
阅读 518
c++代码
#include <iostream>
#include <cstdio>
using namespace std;
const int N = 1e5 + 5;
int a[N];
int head, idx;
int ne[N];
void init()
//初始化
{
head = -1;
idx = 1;
}
void TopInsert(int x)
//在头结点之后插入一个元素x
{
a[idx] = x;
ne[idx] = head;
head = idx;
idx ++;
}
void delet(int k)
//删除第k次插入后的元素
{
ne[k] = ne[ne[k]];
}
void ListInsert(int k, int x)
//在第k次插入的元素后插入元素x
{
a[idx] = x;
ne[idx] = ne[k];
ne[k] = idx;
idx ++;
}
int main()
{
int t;
cin >> t;
init();//初始化初始化初始化(!重说三)
while(t --)
{
string c;
int x,k;
cin >> c;
if(c == "H"){
scanf("%d", &x);
TopInsert(x);
}
else if(c == "D"){
scanf("%d", &k);
if(!k) head = ne[head];//第0个插入就是指什么都还没插入时,指头结点
delet(k);
}
else if(c == "I"){
scanf("%d %d", &k, &x);
ListInsert(k, x);
}
}
int i = head;
while(i != -1)
{
printf("%d ", a[i]);
i = ne[i];
}
return 0;
}