算法与数据结构【30天】集训营——线性表之易混淆知识点双链表的结点前插和后插(05)

举报
王小王-123 发表于 2022/08/09 00:13:27 2022/08/09
【摘要】 目录 双链表的插入P结点后插入新的结点S(后插案例)P结点前插入新的结点q(前插案例) 每文一语 双链表的插入 在双链表的插入操作,我们比较头疼的就是,明明选项看着答案都是比...

在这里插入图片描述

双链表的插入

在双链表的插入操作,我们比较头疼的就是,明明选项看着答案都是比较的完整,但是为啥就是选不正确呢?问题可能出在你的顺序问题上。

双向链表的插入其实并不复杂,只是在原有单链表的基础上多了连接一个向前的指针而已。但是需要注意的是操作的顺序很重要,不可以写反了

P结点后插入新的结点S(后插案例)

在这里插入图片描述

s->prior=p; //把p赋值给s的前驱
s->next=p->next;// 把p->next赋值给s的后继
p->next->prior=s;// 把s赋值给p->next的前驱
p->next=s;   //把s赋值给p的后继


  
 
  • 1
  • 2
  • 3
  • 4
  • 5

切记顺序不可以记错 在写代码的时候可以将操作步骤画出来,理清实施步骤的顺序。

总而言之就是,后插问题上,首先我们需要画出它的插入操作顺序图,第一步是将S的前驱链接在P之后,然后在P的后驱链接在P原来的后驱的前驱,第三步就是P原来的后驱的前驱等于S,P的后驱等于S

在这里插入图片描述
先后顺序,不能搞反了,总的来说就是为了原始的地址不会被遗漏,换言之在双链表的插入当中不能操作指针域的丢失,如果我们直接就是执行P->next=S,那么就会丢失P原来结点后的元素,所以说顺序是非常重要的

至于我们应该如何去记忆这种顺序呢?我总结了一个,当我们进行P后插的时候,一定要将P->next =S 最后一个执行,其他的顺序你可以自己变化,但是我推荐记住上面的

在这里插入图片描述

P结点前插入新的结点q(前插案例)

在这里插入图片描述
前插,我们需要注意的我们知道P的指针,这个时候P的prev是已经知道且固定的,并且我们在操作中需要用到的所以这个时候,我们就不能提前将P的prev改变编程q,换言之就是这一步应该是最后一步。

这也等价于前面在执行后插的时候,P的next是已知的,不能将P的next放在前面执行,需要放在最后执行。把握好这一原则,在双链表的插入操作当中,应该是比较清晰了。

在这里插入图片描述
上面的顺序,以及不可变的操作顺序,需要我们熟记于心,这样就可以对此类考点,游刃有余了

每文一语

知识点的混淆总是让人彻夜难眠

文章来源: wxw-123.blog.csdn.net,作者:王小王-123,版权归原作者所有,如需转载,请联系作者。

原文链接:wxw-123.blog.csdn.net/article/details/126206604

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。