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


    在这里插入图片描述

    双链表的插入

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

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

    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放在前面执行,需要放在最后执行。把握好这一原则,在双链表的插入操作当中,应该是比较清晰了。

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

    每文一语

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

  • 相关阅读:
    Umi3实战教程
    为什么通过CRM软件系统能更好的跟进客户
    Asp.Net Core&Jaeger实现链路追踪
    【C#/VB.NET】 将PDF转为SVG/Image, SVG/Image转PDF
    CSS经典布局--圣杯布局和双飞翼布局
    C#实现二分查找算法
    graphite statsd接口数据格式说明
    类似邮件收发功能的相关数据库设计或逻辑处理记录
    10 基于Dubbo 配置实战
    28-k8s集群中-StatefulSets控制器(进阶知识)
  • 原文地址:https://blog.csdn.net/weixin_47723732/article/details/126206604