news 2025/12/25 15:40:43

双向链表的结点插入

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
双向链表的结点插入

引入:

在单链表中,查找其直接后继的时间复杂度为O(1),而查找其直接前驱的时间复杂度为O(n)。

好比如下单链表:

若查找2的直接后继,记指针p指向值为2的节点(p->data=2),则2的直接后继是p->next;但若查找2的直接前驱时,无法通过p直接获取(单链表无前驱指针),需从头指针head开始遍历,直到找到节点q满足q->next == p(q即为p的前驱),遍历最坏需走n步,因此时间复杂度为O(n);故面对这种情况,为降低时间复杂度,我们引入双向链表。

双向链表简介:

第一个格子为prev(指向前一个结点),第二个格子为data(存放数据),第三个格子为next(指向后一个结点);

与单向链表不同的是,双向链表多了一个可以指向前一个结点的指针(即prev),假设图中头结点head后一个结点为q,则有q->prev = head;head->next = q;这样,链表就能通过next和prev两个指针向前或向后遍历,不再是单方向的流动。

双向链表的核心优势:

  • 查找直接前驱 / 后继的时间复杂度均为 O (1)(通过prev/next指针直接获取),解决了单链表查找前驱 O (n) 的问题;
  • 插入 / 删除操作时,无需像单链表那样从头遍历找前驱节点,仅需通过prev指针直接定位,操作效率提升;
  • 注意:双向链表的代价是每个节点多占用一个指针的内存空间(空间换时间)。

在双向链表中,头插法的使用:

流程图:

在已知双向链表的基础上使用头插法,按如上图的步骤更改箭头的指向

核心代码及理解:

在双向链表中,尾插法的使用:

流程图:

第一步:将存放新数据的结点记为p,p->prev =tail(尾结点);

第二步:tail->next = p;将原来的尾结点的next指向新的尾结点new;

第三步:第三步:p->next = NULL(新节点作为新尾节点,后继指向NULL);

若为「双向循环链表」,第三步需改为p->next = L(头结点),同时L->prev = p(头结点的前驱指向新尾节点),维持循环结构。

核心代码及理解:

在双向链表中,指定位置插入节点的使用:

第一步:在双向链表中,指定位置插入(pos从1开始计数),优先找“前驱节点”(更符合操作习惯),遍历的终止条件是“找到第pos-1个节点”,且必须判断遍历过程中指针是否为空(避免pos超出链表长度)(下面的代码图展示的是前驱结点)

第二步:将数据e存放在新的结点q中

第三步:改变prev和next的指向,让数据e被插入链表中

流程图:

核心代码:

通过遍历找到指定位置的前一个结点:

更改指针的指向,让新结点插入链表中来:

  • p8和p9的代码图源于b站逊哥
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/23 1:49:39

赛博炒股时代来了,股票成为“千问第一问”

“白天炒股,晚上算命”,AI被脑洞大开的用户解锁千奇百怪的应用。 12月22日,阿里千问发布了一份“2025十大AI提示词”榜单。人们使用千问App的十大高频场景分别是:股票、八字、情感咨询、朋友圈文案、景点推荐、双色球号码、失眠、…

作者头像 李华
网站建设 2025/12/23 1:43:50

LangFlow深度解析:如何用图形化界面玩转LangChain应用

LangFlow深度解析:如何用图形化界面玩转LangChain应用 在大模型浪潮席卷各行各业的今天,越来越多团队希望快速构建基于语言模型的智能系统——从客服机器人到内部知识助手,从自动化报告生成到多工具协同的AI代理。但现实是,即便有…

作者头像 李华
网站建设 2025/12/23 1:43:48

2026中专学历考会计,可以从哪个证书开始?

🧭2026 年,会计行业已从 “账房先生” 的传统模式,升级为 “财务核算 数据分析” 的复合型人才需求模式。对中专学历的会计从业者而言,学历并非职业发展的 “天花板”,选对入门证书筑牢根基,再搭配 CDA 数…

作者头像 李华
网站建设 2025/12/23 1:41:32

Android SO库缺失终极修复指南

核心目标:解决 library not found、dlopen failed、UnsatisfiedLinkError 等 Native 层崩溃。 适用场景:腾讯会议、Flutter 应用或定制 APK 在 ARM/x86 设备(特别是 RK3566 等定制系统)上无法启动。 🔍 第一阶段&#…

作者头像 李华
网站建设 2025/12/23 1:41:31

LangFlow支持WebSocket通信,实现实时AI交互

LangFlow 支持 WebSocket 通信,实现实时 AI 交互 在构建大语言模型(LLM)应用的今天,开发者越来越需要一种既能快速验证想法、又能实时观察执行过程的开发方式。传统的编码模式虽然灵活,但在调试复杂链路、展示生成流程…

作者头像 李华
网站建设 2025/12/23 1:37:30

基于Python+大数据+SSM温布尔登特色赛赛事数据分析可视化平台(源码+LW+调试文档+讲解等)/温布尔登赛事分析/温布尔登数据可视化/温布尔登特色赛事/温布尔登赛事平台/赛事数据分析平台

博主介绍 💗博主介绍:✌全栈领域优质创作者,专注于Java、小程序、Python技术领域和计算机毕业项目实战✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 2025-2026年最新1000个热门Java毕业设计选题…

作者头像 李华