$$\color{red}{算法}\color{blue}{基础课}\color{purple}{笔记and题解}\color{green}{汇总}$$
笔记:
双链表和单链表不同,它的主要功能是优化问题。
虽然我也不知道怎么优化……
双链表呢……我们偷懒一点,直接把编号$0$的节点作为头节点,编号为$1$的节点作为尾节点。
然后定义变量:$l$(左边的节点)、$r$(右边的节点)、$e$(权值)。
代码:
#include <bits/stdc++.h>
using namespace std;
const int N = 100010;
int l[N], r[N], e[N], idx;
void init() { //初始化
r[0] = 1, l[1] = 0;
idx = 2;
}
void insert(int a, int x) {
e[idx] = x;
l[idx] = a, r[idx] = r[a];
l[r[a]] = idx, r[a] = idx ++ ;
}
void remove(int k) { //删除第k个点
r[l[k]] = r[k];
l[r[k]] = l[k];
}
int main() {
int m; cin >> m;
init();
while (m--) {
string op; cin >> op;
int k, x;
if (op == "L") {
cin >> x;
insert(0, x);
}
else if (op == "R") {
cin >> x;
insert(l[1], x);
}
else if (op == "D") {
cin >> k;
remove(k + 1);
}
else if (op == "IL") {
cin >> k >> x;
insert(l[k + 1], x);
}
else {
cin >> k >> x;
insert(k + 1, x);
}
}
for (int i = r[0]; i != 1; i = r[i]) cout << e[i] << ' ';
puts("");
return 0;
}
大佬