AcWing 826. 单链表
原题链接
简单
作者:
那你很6哦
,
2021-04-17 13:47:23
,
所有人可见
,
阅读 265
#include <iostream>
using namespace std;
const int N = 100010;
//index 存储当前已经用到了哪个点 head表示头节点的下标 e[N]存储节点数据 ne[N]指向下一个元素,相当于保存地址
int index, head,e[N], ne[N];
void init(){
index = 0;
head = -1;
}
// 向头节插入一个数
void add_to_head(int x){
e[index] = x;
ne[index] = head;
head = index;
index++;
}
//删除第 k 次插入的数后面的数,即删除下标为k-1后面的数(地址为ne[k-1]),它后面的数的是由指针指向的而不是简单的下标
void delete_k(int k){
ne[k-1] = ne[ne[k-1]];
}
//在第 k 个插入的数后插入一个数
void add_x(int k, int x){
e[index] = x;
ne[index] = ne[k-1];
ne[k-1] = index;
index++;
}
int main(){
init();
int m;
cin >> m;
while(m--){
int k, x;
char ch;
cin >> ch;
if(ch=='H'){
cin >> x;
add_to_head(x);
}
else if(ch=='D'){
cin >> k;
if(k==0) head = ne[head]; //k为0表示删除头节点
else delete_k(k);
}
else if(ch=='I'){
cin >> k >> x;
add_x(k, x);
}
}
for(int i=head;i!=-1;i=ne[i]){
cout << e[i] << " ";
}
return 0;
}