单双链表

单链表


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];
}
posted @   Carrot_Rui  阅读(43)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示