AcWing 826. 单链表
原题链接
简单
#include<iostream>
using namespace std;
const int N = 100010;
int idx, a[N], ae[N];
int head;
// idx 表示当前还未填入的数,可以表示第几个插入的顺序,不过从0开始
// a[i]表示第 i + 1 次插入的数值,ae[i] 表示当前元素的下一个元素在 a 数组中的下标idx
void add_to_head(int x)
{
a[idx] = x;
ae[idx] = head;
head = idx;
idx++;
}
void add(int k, int x) // 在第k个插入的数后插入x
{
a[idx] = x;
ae[idx] = ae[k];
ae[k] = idx;
idx++;
}
void delt(int k) // k是第k个插入的数
{
ae[k] = ae[ae[k]]; // 指向把第k个数指向下下个下标位置
}
int main(){
int n;
idx = 0, head = -1;
cin >> n;
while(n--)
{
char op;
cin >> op;
int k, x;
if(op == 'H')
{
cin >> x;
add_to_head(x);
}
if(op == 'D')
{
cin >> k;
if(!k) head = ae[head]; // k为0时删除头节点,head原来指向的第一个节点下标,那么head的值就是第一个节点的下标
// 所以ne[head]是第二个节点的下标
delt(k-1); // 第k个插入的数下标为 k - 1
}
else if(op == 'I'){
int k, x;
cin>>k>>x;
add(k-1,x);
}
}
for(int i=head;i!=-1;i=ae[i])
cout<<a[i]<<" ";
return 0;
}