AcWing 826. 单链表
原题链接
简单
作者:
Lupinus
,
2021-05-27 14:29:33
,
所有人可见
,
阅读 199
#include <cstdio>
using namespace std;
const int maxn = 1e5 + 10;
int e[maxn], ne[maxn], top, head = -1; // 重要,否则停不下来
void add_head(int x) {
e[top] = x;
ne[top] = head;
head = top;
top++;
}
void del(int k) {
// 第k个插入的数的逻辑下一个是ne[k]而不是ne[k+1]
ne[k] = ne[ne[k]];
}
void insert(int k, int x) {
e[top] = x;
ne[top] = ne[k];
ne[k] = top;
top++;
}
void show() {
int p = head;
while (p != -1) {
printf("%d ", e[p]);
p = ne[p];
}
}
int main(int argc, char const *argv[])
{
char op;
int p1, p2;
int m; scanf("%d", &m);
while (m--) {
getchar(); // C语言有缓冲区回车的问题
scanf("%c", &op);
switch (op) {
case 'H':
scanf("%d", &p1);
add_head(p1);
break;
case 'I':
scanf("%d%d", &p1, &p2);
insert(p1 - 1, p2); // 题目是从1开始编号的
break;
case 'D':
scanf("%d", &p1);
// 删除头结点的逻辑不同
if (!p1) {
head = ne[head];
} else {
del(p1 - 1); // 题目是从1开始编号的
}
}
}
show();
return 0;
}