AcWing 826. 算法基础班--习题--P27 单链表
原题链接
简单
作者:
初静
,
2021-03-23 14:57:44
,
所有人可见
,
阅读 309
之前写的题解(更详细版本)
#include <iostream>
#include <algorithm>
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;
ne[idx] = head;
head = idx;
idx ++;
}
void remove(int k) { // 删掉下标是k的点后面的点
ne[k] = ne[ne[k]];
}
void add(int k, int x) { // 将x插入到下标是k的点后面
e[idx] = x;
ne[idx] = ne[k];
ne[k] = idx;
idx ++;
}
int main () {
int m; cin >> m;
init();
while (m --) {
char op; cin >> op;
if (op == 'H') {
int x; cin >> x;
add_to_head(x);
} else if (op == 'D') {
int k; cin >> k;
if (!k) head = ne[head];
remove(k - 1);
} else {
int k, x;
cin >> k >> x;
add(k - 1, x);
}
}
for (int i = head; i != -1; i = ne[i]) printf("%d ", e[i]); // 这里不是i++,而是i=ne[i];
puts("");
return 0;
}