五分钟入门链表(三)

文章详细介绍了如何实现单链表的尾删、任意位置插入和删除操作,包括考虑特殊情况如链表为空或只有一个元素。同时提到了查找功能的实现,并讨论了利用已有的头插和头删函数处理特殊情况的策略。最后提到了释放链表空间的方法以及打印链表的辅助功能。
摘要由CSDN通过智能技术生成
  1. 初始化链表

  1. 实现接口:

  • 尾删

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

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

  • 释放空间

我们之前已经完成了,详见初始化链表尾插头插头删

如果有兴趣不妨点进主页更多精彩内容呈现哦😘

尾删

首先按照套路来,我们先画出示意图或者说原理图来。

这里考虑的是数据大于1的情况

这样我们再来实现代码:

但是我们很快认识到这应该是不行的——如果只有1个数据或者干脆没有数据呢?

这里其实涉及到一个套路,我们要用极限的思维方式去思考这个问题。随着我们写的工程文件越来越多就会发现其中的奥妙之处。

我们再来画一下只有一个数据的情况:

直接free就行了

那我们再来思考如果是没有数据呢?是不是直接return就行了呢?

现在我们再来修改一下代码

如此我们再思考还有没有遗漏的地方呢?如果没有我们就直接写入主函数中,进行调试代码。详见顺序表(三),感兴趣的可以看看。建议大家写一步,完成一个函数,就调试一个函数。

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

这里我们因为要在任意位置插入,所以我们首先要找到这个节点,考虑到我们接下来还要写一个任意位置删除,所以我们最好先写一个查找函数。

但是我们发现其实用查找函数去实现这个函数并不靠谱,因为我们不知道上一个值,就很尴尬。但是我们通过实现查找函数可以让我们的接口更加丰富。

还是一样的先画出原理图

这里还是只考虑了大于1的情况

根据尾删的套路我们又要思考了——只有一个的情况呢?或者干脆没有的情况呢?

这里我们可以取巧吧,当遇上小于等于1的情况时我们可以直接调用头插,这个套路在之前我写的顺序表(四)中有很好的体现,感兴趣的可以看一下哦!

将思想转化为代码就是这样:

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

我们可以推测一下,这里的套路应该时和上一个函数的套路应该是差不多的吧。还是要先找到pos,然后cur->next指向pos->next,最后free掉就行了

还不懂的可以看一下原理图:

这里考虑的情况是不是和刚才的一样

思考一下是不是还有其他情况呢?熟悉套路以后我们这里一样可以取巧吧,调用头删。

将思想转化为代码就是这样:

每次当我们写完代码以后一定要多总结套路与思想,这样我们才能有长远的进步与成长。

接下来实现释放空间

释放空间

这里还是更之前一样的,调用头删函数,全部删完就行了,这是其中一种比较简单的实现方式,大家也可以自己尝试一下有没有别的实现方式。

其实有兴趣的小伙伴可以再实现一个打印函数看看自己是否真的掌握了单链表的思想和套路

这个代码大家可以做个参考

下期内容更加精彩哦

都看到这里了不妨点个赞吧,你们的赞和留言就是对我最大的鼓励!

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

染柒_GRQ

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

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

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

打赏作者

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

抵扣说明:

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

余额充值