插入和删除两种操作如下
链表的问题画图就很容易理解了。
#include<bits/stdc++.h>
using namespace std;
const int N = 1e6+10;
int e[N], ne[N], h = -1, idx;
int n;
void add_head(int x){
e[idx] = x;
ne[idx] = h;
h = idx++;
}
void del_num(int k){
ne[k] = ne[ne[k]];
}
void add_k(int k, int x){
e[idx] = x;
ne[idx] = ne[k];
ne[k] = idx++;
}
int main(){
cin >> n;
char op;
// 第k个插入的点是 k - 1下标
while(n --){
cin >> op;
//H x,表示向链表头插入一个数 x。
if(op == 'H'){
int x;
cin >> x;
add_head(x);
}
//D k,表示删除第 k 个插入的数后面的数(当 k 为 0 时,表示删除头结点)。
else if(op == 'D'){
int k;
cin >> k;
if(!k) h = ne[h];
del_num(k - 1);
}
//I k x,表示在第 k 个插入的数后面插入一个数 x(此操作中 k 均大于 0)。
else{
int k, x;
cin >> k >> x;
add_k(k - 1 ,x);
}
}
for(int i = h; i != -1; i = ne[i]) cout << e[i] << " ";
return 0;
}
评论区