【数据结构】链表 精华 含代码逐行解说

张开发
2026/4/16 8:11:24 15 分钟阅读

分享文章

【数据结构】链表 精华 含代码逐行解说
一 创建 新节点主要理解2个点需要返回值是节点的结构体类型malloc函数的返回值 以及必要的判断是否开辟成功每个节点的数据域 存储 传入的参数但指针域必须置为空 防止指向垃圾空间 后通过改变指向来串联链表测试一下 调试看窗口 确实可以二打印链表1 思路 使用 一级指针的目的“传指针变量是为了能通过当前节点的内存地址顺藤摸瓜找到存储在其中的‘下一个节点的地址’从而实现遍历。”如果没有这个地址指针变量pcur就没法完成pcur pcur-next这个移动动作。2 链表结尾节点指向空 作为结束标志 每次使指针指向下个节点通过 将下个节点的地址值 赋值给该节点的指针变量void SLTprint(SLT *phead) { SLT *pcur phead; while (pcur) { printf(%d-, pcur-data); pcur pcur-next; } printf(NULL); }3通过 一二步测试完毕 如下图三 尾插 插入分为两种情况 第一是本来链表为空就是啥都没有空链表第二 就是非空链表无论插入 /删除 都只是对指针域进行操作的 数据域 不会去使用的通过指针的指向和移动来实现运算啦4. 核心链接逻辑顺序千万不能错步骤 A新节点接管旧链表代码newnode-next *pphead;核心思考*pphead解引用拿到的是原来的第一个节点。让新节点的next指向它这样新节点就和后面的旧链表连起来了。此时旧的头指针依然指向原来的第一个节点。步骤 B头指针易主代码*pphead newnode;核心思考将头指针的指向更新为刚刚创建的newnode。至此新节点正式成为链表的第一个节点新的头。四头插 show主要的 就是 一个先后顺序问题 必须先 让新的节点指向原来的头节点然后再去更新头节点 把新增的节点作为头节点五头删主要的控制点在于 先找到第二个节点再说 不然如果直接释放头节点 就无法通过-找到下个节点了再将通过 二级指针解引用得到的 一级指针 本质是节点的指针地址通过这个地址 找到对应的内存空间 修改到的是 头指针的指向 使其改为第二个节点的地址六尾删顺序表的经验告诉我们删除操作 需要判断链表里面的节点数目1 当只有一个节点时没删除便会使得链表为空了需要将这块空间释放掉 并置为空 避免野指针的情况2 多个节点的情况 用 两个临时指针变量 去探路prev 的目的是找到倒数第二个节点的地址 原因 当循环结束时 ptail 指向的是尾部节点在最后一次进入循环就是 将倒数第二个节点 传给 prev要删除尾节点 就是 直接free释放 再放空注意 别忘记 将新的尾节点 的下一个指针 置为空 这是 设定 作为链表的结束条件

更多文章