一、静态链表
1. 静态单向链表
#include <bits/stdc++.h>
using namespace std;
const int N = 1000;
int v[N] ,ne[N]; //数组v用来存放当前节点的值, 数组ne用来存放当前节点的后指针
int head ,idx; //head代表头节点, idx代表当前分配节点的编号
//初始化链表, 将头指向空, 分配的节点编号为0
void init(){
head = -1;
idx = 0;
}
//插入操作, 在头节点后加入一个值为x的节点
void insert(int x){
v[++idx] = x;
ne[idx] = head, head = idx;
}
//删除节点x后面的一个点, 直接将节点x的后指针指向x后面的后面那个点即可
void remove(int x){
ne[x] = ne[ne[x]];
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
init();
//这个部分自己根据题意写
return 0;
}
2. 静态双向链表
#include <bits/stdc++.h>
using namespace std;
const int N = 1000;
int v[N], pre[N], ne[N]; //数组v存储当前节点的值,数组pre存储当前节点的前指针,数组ne存储当前节点的后指针
int idx; //idx表示当前分配节点的编号
//初始化链表, 分配编号1作为头节点, 编号2作为尾节点, 当前分配的节点编号为2
void init() {
pre[2] = 1, ne[1] = 2;
idx = 2;
}
//插入操作, 在节点n的后边插入一个值为x的节点, 要注意操作的顺序
void insert(int n, int x) {
v[++idx] = x; //idx自加, 再将值存入节点idx
pre[idx] = n, ne[idx] = ne[n]; //idx的前指针变为n, 后指针变为n的后指针
pre[ne[n]] = idx, ne[n] = idx; //n原先后面的那个点的前指针变为idx, n的后指针变为idx
}
//删除节点n, 直接将n前后两个点的对应指针修改一下即可
void remove(int n) {
pre[ne[n]] = pre[n]; //n后面那个点的前指针变为n的前指针
ne[pre[n]] = ne[n]; //n前面那个点的后指针变为n的后指针
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
init();
//这块自己根据题目要求写
return 0;
}
二、动态链表