AcWing 826. 单链表
原题链接
简单
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
//head 指向的是头节点的下标,也就是说head的值是头节点的下标
//e用来储存值
//ne用来储存下一个值的下标
int head, e[N], ne[N], idx;
void init()
{
head = -1;
idx = 0;
}
//链表头插入
void add_in_head(int x)
{
e[idx] = x;
ne[idx] = head; //head的值就是第一个节点的下标
head = idx ++ ;
}
void remove(int k)
{
if( k == -1 ) head = ne[head];
ne[k] = ne[ne[k]];
}
void insert(int k, int x)
{
e[idx] = x;
ne[idx] = ne[k];
ne[k] = idx ++ ;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
init();
int m, k, x;
char ch;
cin >> m;
while(m -- )
{
cin >> ch;
switch(ch)
{
case 'H' : cin >> x; add_in_head(x);break;
case 'D' : cin >> k; remove(k - 1);break;
case 'I' : cin >> k >> x; insert(k - 1, x);break;
}
}
for(int i = head; i != -1;i = ne[i]) cout << e[i] << " ";
return 0;
}