原题链接:
题解:
这道题要求手搓一个链表,因为题目需要根据插入顺序进行做题(因此用静态链表:数组的下标记录)
代码:
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int e[N], ne[N], head, idx;
//初始化
void init() {
head = -1, idx = 0;
}
//在头部插入元素
void insert_head(int x) {
e[idx] = x;
ne[idx] = head;
head = idx++;
}
//删除头结点
void del_head() {
head = ne[head];
}
//在第k个插入的数后边插入一个元素
void insert(int x, int k) {
e[idx] = x;
ne[idx] = ne[k];
ne[k] = idx++;
}
//删除第k个插入的数后边的元素
void del(int k) {
ne[k] = ne[ne[k]];
}
int main() {
int M;cin >> M;
init();
while (M--) {
char op;cin >> op;
int x, k;
switch (op) {
case 'H':
cin >> x;
insert_head(x);
break;
case 'D':
cin >> k;
if (k == 0) del_head();
else del(k - 1);
break;
case 'I':
cin >> k >> x;
insert(x, k - 1);
break;
default:
break;
}
}
for (int i = head;i != -1;i = ne[i]) cout << e[i] << " ";
}