文章目录
单链表
用数组实现的单链表可以在任意位置插入、删除、替换一个数,相比于用结构体和指针实现的动态链表而言,数组模拟链表运行的速度非常快,动态链表基本会出现超时的现象。但缺点是浪费内存
/*
H x,表示向链表头插入一个数 x。
D k,表示删除第 k 个插入的数后面的数(当 k 为 0 时,表示删除头结点)。
I k x,表示在第 k 个插入的数后面插入一个数 x(此操作中 k 均大于 0)
*/
#include<iostream>
#include<cstdlib>
using namespace std;
const int N = 100010;
int head, e[N], ne[N],idx;
//void init() {
// head = -1;//头节点下标
// idx = 0;
//
//}
void add_to_head(int x) {
e[idx] = x;//表示idx点的值是多少
ne[idx] = head;//表示idx的next指针多少
head = idx;
idx++;//储存当前用到了哪个点
}
void add(int k, int x) {
e[idx] = x;
ne[idx] = ne[k];
ne[k] = idx;
idx++;
}
void remove(int k) {
ne[k] = ne[ne[k]];
}
int main() {
head = -1;//头节点下标
idx = 0;
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] << " ";
cout << endl;
return 0;
}