快速入门双链表(下)

  1. 温习链表类型

  1. 初始化链表

  1. 实现接口:

  • 尾插

  • 头插

  • 头删

  • 尾删

  • 查找

  • 打印

  • 任意插入,在pos的前面插入x

  • 任意删除,删除pos位置的值

  • 释放空间

上节我们探讨到了头插。详见双链表(上)

本次探讨的结构

头删

本质上来讲就是把哨兵位的后面那个删除,也就是第一个节点删除(注意不是头节点!)

我们首先来看一下原理图:

头删原理

这里要注意:头节点删了,结构被破坏了,后面就不能进行操作了!头节点是整个结构的核心,删除了就找不到整个链表了,我们后续可能还会进行操作,所以千万不能删除头节点。

我接下来将思想转换为代码

我们可以思考一下如果只有一个节点会不会让程序崩溃呢?我们从原理图得知应该是不会。

这时候有些小伙伴可能想测试一下,这里详见顺序表(三)

为了便于我们测试我们再写一个打印函数。

这个比较简单,我就直接写了。

有了打印函数就很好测试了,先测一下双链表(上)写的内容

大家可以看一下运行结果是否相同

这里如果有结果不一样,详见双链表(上)

接下来我们测试一下头删

因为我们之前打了断言所以我们很清楚的知道双链表中只剩下头节点了,所阻止了继续头删。

没有问题的话我们继续

尾删

我们首先了解原理图:

尾删原理图

跟头删一样我们也思考一个问题:我们可以思考一下如果只有一个节点会不会让程序崩溃呢?我们从原理图得知应该是不会。

接下来就是写代码了

为了确保我们写对了,这时候我们最后测试一下

测试尾删

显然没有问题,接下来我们继续。

任意插入,在pos的前面插入x

我们还是首先来看一下原理图:

任意位置插入原理图

我们发现首先我们必须解决怎么找到pos,然后才是如何插入的问题

这个查找函数显然也可以倒着走,方法不唯一。

我们再把它结合起来。

我们再来测试一下,看看结果是否和我们想要的一样。

查找函数

查找与任意插入相结合

结果果然与我们预想的一样。

任意删除,删除pos位置的值

我们还是首先来看一下原理图:

任意位置删除原理图

有了上个函数的经验我们很快就写出代码

那么我们再来测试一下我们写的是否正确呢?

任意位置删除测试

最后面的释放空间就很简单了。

释放空间

这里要注意先后顺序,所以最好采用双指针的手法。

写到最后,我们其实可以再来修改一下,因为函数之间可以相互调用,详见顺序表(四)

尾插修改

注意这里为什么传phead ,因为phead后一个就是pos的前一个!

头插修改

头删修改

尾删修改

这些基本上都能举一反三,就不做重复的解释了。

写到这里如果大家还想继续完善接口的话可以再补充一个计数函数

计数

可以测试一下

计数函数测试

写到这里基本就写完了,大家还可以再写个菜单什么的,详见顺序表(四)

这里就不做过多的解释了。

求各位大佬点赞加关注,会有更多关与数据结构的内容呈现哦!

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

染柒_GRQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值