单链表
有三个操作:
在头部添加
在k位置添加
在k位置删除
有两个需要注意的点
1:如果初始的idx为0,那么传入的k需要-1 为 : k - 1;如果传入的idx为1,那么传入的k为本身即可
2:在删除的头节点的时候,传入的k为0或者-1,都会导致异常发生,所以删除头节点需要做特殊处理:head = ne[head]
C++ 代码
#include <iostream>
using namespace std;
const int N = 100010;
int e[N],ne[N];
int head,idx;
void initial(){
head = -1;
idx = 1; // 如果idx = 0,那么在k位置添加和删除k位置传入的参数都必须得是 k - 1
}
//在头部插入
void insert(int x){
e[idx] = x;
ne[idx] = head;
head = idx++;
}
//在k后面插入
void insertk(int k , int x){
e[idx] = x;
ne[idx] = ne[k];
ne[k] = idx++;
}
void removek(int k){
ne[k] = ne[ne[k]];
}
int main(){
int n;
cin >> n;
initial();
while(n--){
char c;
cin >> c;
if(c == 'H'){
int x;
cin >>x;
insert(x);
}else if(c == 'D'){
int x;
cin >> x;
if(x == 0) head = ne[head];
else removek(x);
}else{
int k , x;
cin >> k >> x;
insertk(k,x);
}
}
for(int i = head;i != -1; i = ne[i]){
cout << e[i] <<" ";
}
cout << endl;
return 0;
}