任意位置 单链表 回归

单链表的操作 主要就是 地址 指针的指向的改变 主要是弄懂 简单的几个重要的节点

主要 1 在 指定位置之前插入 数据

2 在 指定位置之后插入 数据

3 删除 指定位置 的数据

4 删除 指定位置之后 的数据

5 销毁 整个链表

第 1 在 指定位置之前插入 数据

首先 可能 需要修改头指针的指向所以 需要传一个二级指针的地址

其次需要知道该位置的前一个节点的地址 以及插入的数据

逐行重点理解的是 首先最基本的断言 判空 create 一个新的节点

其次 分类 为啥呢?画图 当且仅有一个有效节点时,prev的下个节点一直是空 永远不等于 pos循环不会结束 避免这种情况的发生所以选择 分支去隔离 当是这种情况的时候就直接调用 头插的函数就 ok

另一种情况 就是普遍的案例 当我们 在 pos 这个位置之前 插入的时候 需要先找到 prev的位置

用循环去找 就是 主要利用循环的结束条件来看 当prev->next == pos时 循环结束 刚好停在 pos之前的那个位置

其次重要注意的是 新节点 指向前后顺序问题 首先 是 1 然后 2

因为如果先是 2 则会找不到 pos这个节点 只有 prve 指向 新节点 而新节点找不到 pos

因为 prev的下个节点已经被你指向了 新节点 失去了关系 找不到了 就 是分手了 别找我i

第二种 2 在 指定位置之后插入 数据

相比于 在指定位置之前来说 不会修改头节点

而且既然有指定的位置 自然排除了 空链表的情况

图例 很清楚 下一个

第三种 删除 指定位置 的数据

认识删除 不是直接删 而是通过 别的途径做到从原链表中看不到而已

就像顺序表的删除 只是对下标的修改 限制 使得其是否在边界里而已

链表 而是通过指针的指向 让元素跳过 该节点做到删除的目的

和 插入一样 当有且只有一个节点时 直接 调用 原有的删除函数即可

记得这里执行顺序是 从右至左 别忘记释放并置为空该删除的位置

4 删除 指定位置之后 的数据

逐行解读 主要是删除后一个节点所以断言不能为空

5 销毁 整个链表

依旧 while循环 主要就是 先将下个节点的指针存起来 再把当前的节点释放

如此往复 直至 最后 指向null循环结束 别忘记将头节点置为空 因为空间全部被释放了

相关推荐
洛水水17 小时前
【力扣100题】19. 排序链表 | 归并排序详解
算法·leetcode·链表
handler0118 小时前
速通蓝桥杯省一: 前缀和&差分(附经典例题)
c语言·c++·笔记·职场和发展·蓝桥杯
谙弆悕博士18 小时前
快速学C语言——第 11 章:指针与数组
服务器·c语言·开发语言·学习方法·业界资讯·指针·数组
薇茗19 小时前
【初阶数据结构】 左右逢源的分支诗律 二叉树3
c语言·数据结构·二叉树·经典oj面试题
洛水水19 小时前
【力扣100题】20.合并 K 个升序链表
算法·leetcode·链表
袁雅倩19971 天前
当吸尘器、筋膜枪都用上Type-C,供电方案该怎么选?浅谈PD取电芯片ECP5702的应用
c语言·开发语言·支持向量机·动态规划·推荐算法·最小二乘法·图搜索算法
流年如夢1 天前
栈和列队(LeetCode)
数据结构·算法·leetcode·链表·职场和发展
CHANG_THE_WORLD1 天前
C语言中的 %*s 和 %.*s 和C++的字符串格式化输出
c语言·c++·c#
消失的旧时光-19431 天前
C语言对象模型系列(四)《Linux 内核里的 container_of 到底是什么黑魔法?》—— 一篇讲透 Linux 内核的“对象模型”核心技巧
linux·c语言·算法
2501_931803751 天前
Go:一门为解决C语言痛点而生的现代语言
c语言·开发语言·golang