news 2026/4/16 12:58:53

双向链表的结点插入

作者头像

张小明

前端开发工程师

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进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 17:27:28

Go语言编译桌面应用为单文件可执行文件实践指南

用Go打造真正“双击即用”的桌面应用:从零到单文件发布的实战之路 你有没有过这样的经历?辛辛苦苦写完一个工具,兴冲冲发给同事:“来试试我做的新程序!”结果对方回你一句:“打不开啊,缺什么库…

作者头像 李华
网站建设 2026/4/13 12:57:07

LangFlow备份恢复策略确保业务连续性

LangFlow备份恢复策略确保业务连续性 在AI应用开发日益普及的今天,越来越多团队开始借助可视化工具加速大模型工作流的构建。LangFlow正是这一趋势下的代表性产物——它让非专业开发者也能通过拖拽方式快速搭建复杂的LangChain流程。然而,当关键业务逻辑…

作者头像 李华
网站建设 2026/4/15 2:13:29

通俗解释W5500以太网模块原理图使能控制

搞定W5500以太网模块的使能控制:从原理图到稳定通信的实战解析你有没有遇到过这种情况?硬件板子焊好了,代码也烧进去了,MCU看着正常运行,但W5500就是“不在线”——SPI读出来全是0xFF,初始化失败&#xff0…

作者头像 李华
网站建设 2026/4/15 9:21:50

LangFlow投资者关系问答生成器

LangFlow投资者关系问答生成器 在上市公司与资本市场之间,每一次信息披露都可能影响股价走势。投资者关系(IR)团队常常面临这样的挑战:如何在财报季快速、准确地回应大量专业提问?传统依赖人工撰写回复的模式效率低、…

作者头像 李华
网站建设 2026/4/6 18:04:22

Centos7安装Git环境

1、使用yum(CentOS 7及更早版本) 更新yum sudo yum update安装git sudo yum install git2、使用dnf(CentOS 8及更高版本) 更新dnf sudo dnf update安装git sudo dnf install git3、使用官方仓库 导入官方Git仓库的GPG密钥 sudo rp…

作者头像 李华
网站建设 2026/4/13 16:02:41

基于Python+大数据+SSM基于数据挖掘的高考志愿推荐系统(源码+LW+调试文档+讲解等)/高考志愿填报系统/志愿推荐工具/高考志愿辅助系统/志愿填报推荐平台

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

作者头像 李华