单双链表
单链表
int head, e[N], ne[N], idx;
// 0 号点 e[0] 指针 ne[0] = 1; head --> 头结点下标
// e[i] --> 表示节点 i的值
// ne[i] --> 表示节点 i 的next指针
// idx --> 存储当前用到的地址,相当于指针,当前用到的点
//初始化
void init(){ head = - 1,idx = 0 ;}
//将 x 插入到头结点后面
void add_to_head(int x){
e[idx] = x, ne[idx] = head, head = idx++;
}
//将 x 插入到下标是 k 的点后面
void add(int k,int x){
e[idx] = x, ne[idx] = ne[k], ne[k] = idx++;// == ne[k] = idx, idx++;
}
//删除下标是 k 的点后面一个点删掉
void remove(int k){
ne[k] = ne[ne[k]];
}
双链表
int list[N], l[N], r[N], idx;
void init(){
r[0] = 1, l[1] = 0, idx = 2; //初始化头结点(右边指向第一个节点)和第一个节点(左边指向头结点)
}
// x 插到 k 后面
void insert(int k, int x){
list[idx] = x; l[idx] = k;
r[idx] = r[k]; //右边连接到下一个节点的左边,左边连接到上一个节点的右边
l[r[k]] = idx; //将原来两个相连接打的节点打断,连到新节点上
r[k] = idx++; //右边的左指针连接到新节点的右指针上,左边同理
}
//删除第 x 个节点
void remove(int x){
r[l[x]] = r[x], l[r[x]] = l[x];
}
注:OI蒻驹一枚,文章仅代表个人观点,如有不对,敬请指出,共同进步,谢谢。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律