#include <bits/stdc++.h>
using namespace std;
const int N=100005;
int e[N], ne[N]; //e数组保存当前节点的值,ne数组保存当前节点的下一个节点的索引
int head = -1, idx = 0; //head是头指针,idx是当前节点的指向。
void add(int k,int x) {
e[idx] = x;
ne[idx] = ne[k];
ne[k] = idx++; //这三步分别是先将值塞入当前节点,然后将当前节点的下一个节点指向原来节点指向的下一个节点,可以理解为插入,然后就是将它的前置节点的下一个节点指向当前节点
}
void addhead(int x) {
e[idx] = x;
ne[idx] = head;
head = idx++; //赋值,然后当前节点指向原本的头节点,头节点再更改为现在的这个塞入的节点。
}
void deletes(int k) {
ne[k] = ne[ne[k]]; //把要删的节点的上一个节点的下一个节点指向下下个节点,相当于直接跳过当前节点。
}
int main() {
int m;
cin >> m;
while (m--) {
char ans;
int x, k;
cin >> ans;
if (ans == 'H') {
cin >> x;
addhead(x);
}
else if (ans == 'I') {
cin >> k >> x;
add(k - 1, x);
}
else if (ans == 'D') {
cin >> k;
if (!k) head = ne[head]; //特判:如果是头节点,那么直接将头节点指向头节点的下一个节点
else
deletes(k - 1);
}
}
for (int i = head; i != -1; i = ne[i]) cout << e[i] << " ";
//指向头节点,直到下一个节点指向的下一个节点为-1,这时表示链表到尽头
}
数组实现单链表(算法专用.详细注释版)
最新推荐文章于 2024-09-14 20:30:05 发布