《征服数据结构》双向链表
摘要:
1,双链表的介绍
2,双链表的用途
3,双链表的节点插入和删除
1,双链表的介绍
前面我们讲过单链表,单链表的特点就是只能往后访问不能往前访问。单链表一般在面试中用的比较多,比如删除倒数第 n 个节点,链表反转等,但在实际的工作中单链表用的并不多。比如Java中的LinkedList,LinkedHashMap等都是双链表。
双链表每个节点包含三个域,一个是数据域,两个指针域。两个指针域中一个指向前一个节点,一个指向后一个节点,如下图所示:

Java代码:
// 双链表节点类
class LinkNode {int val;// 节点中存储的数据。LinkNode pre;// 指向前一个节点的指针。LinkNode next;// 指向下一个节点的指针。public LinkNode(int val, LinkNode pre, LinkNode next) {this.val = val;this.pre = pre;this.next = next;}
} C++语言:
// 双链表节点类
struct LinkNode {int val;// 节点中存储的数据。LinkNode *pre;// 指向前一个节点的指针。LinkNode *next;// 指向下一个节点的指针。LinkNode(int x, LinkNode *p, LinkNode *n) : val(x), pre(p), next(n) {}
}; 单链表中因为只能从前往后遍历,我们只需要记录头节点head即可,但双链表中可以从后往前遍历,我们还需要记录尾节点tail,两个方向都可以遍历。如果不想记录尾节点,也可以让双链表的首尾相连,构成一个环形链表,只记录头节点head即可,从head开始沿着两个方向都可以访问。

2,双链表的用途
双链表的用途非常强大,除了当链表使用以外,还可以当做普通队列,双端队列,栈来使用,除此之外还可以用于数据的缓存,比如常见的LRU(Least Recently Used)缓存,LFU(least frequently used)缓存等。
在Android开发中图片的缓存一般使用的是LruCache,而LruCache继承的就是LinkedHashMap,LinkedHashMap就是一个双向链表。
他会把经常使用的数据插入到头节点head,这样不经常使用的数据就会越来越靠后,当存储数据足够多的时候,就会从尾节点tail往前删除,也就是把最不经常使用的数据给删除,即达到缓存的效果,又防止了数据量过大。
3,双链表的节点插入和删除
双链表的节点插入和删除与单链表一样,也是分三种情况,分别是在头部,尾部和中间,我们分别来看下。
3.1 头部插入:
1,创建新节点,让它的next指针指向head节点。
2,让head的pre指针指向新节点。
3,让head指向新节点。

3.2 尾部插入:
相关文章:
《征服数据结构》双向链表
摘要: 1,双链表的介绍 2,双链表的用途 3,双链表的节点插入和删除 1,双链表的介绍 前面我们讲过单链表,单链表的特点就是只能往后访问不能往前访问。单链表一般在面试中用的比较多,比如删除倒数第…...
我用 Midjourney 的这种风格治愈了强迫症
在 Midjourney 能够实现的各种布局之中,有两种风格因其简洁、有序而独居魅力,它们就是平铺 (Flat Lay) 和 Knolling (Knolling 就是 Knolling, 无法翻译🤣)。要在现实生活中实现这样的美学效果并不容易,你需要精心挑选各种小物件&…...
三维大场景管理-3Dtiles规范
简介 : 这篇文章都是三年前写的了,一直在笔记库存中,今天把他放出来。主要是讲Cesium 的3Dtiles 格式,当然3Dtiles主要是解决场景管理大场景的LOD实现的问题,不管是剔除渲染性能优化之Culling 剔除或者 LOD 、3Dtiles…...
Flutter 中的 FractionalTranslation 小部件:全面指南
Flutter 中的 FractionalTranslation 小部件:全面指南 在 Flutter 的丰富布局库中,FractionalTranslation 是一个允许你将子组件沿着一个轴或两个轴进行部分平移的动画小部件。这种类型的平移通常用于创建滑动效果,如卡片的滑动删除或滑动展…...
Thrift快速入门开发demo
Thrift快速入门开发demo 一、认识Thrift thrift是什么?一个RPC 代码生成框架,使用它的IDL(Interface Defination Language,接口定义语言)定义你想要实现的接口,然后它就会生成对应语言的远程调用框架代码,用户只需要实现接口逻辑,不用关心具体的细节。 tutorial:htt…...
关于C++智能指针复习总结
RAII(Resource Acquisition Is Initialization): 资源获得即初始化 利用对象生命周期来控制程序的资源(将资源交给对象处理) 智能指针利用了该思想 将资源交给一个对象, 初始化资源(可以是指针或者等等资源), 释放交给析构函数 因为析构函数无论是什么场景, 对象销毁时一定会…...
Prometheus Operator创建告警规则并接入钉钉报警
prometheus之钉钉报警 前言1. 添加prometheus报警规则1.2 添加自定义报警规则文件 2. 配置钉钉报警2.2 部署dingding插件 3. 编写alertmanager配置文件 前言 在kubenetes上安装了kube-promethues(包含Prometheus Operator),程序正常跑起来了,…...
Word整理论文参考文献
1.安装Zotero软件 2.安装Zotero的Chrome网站插件,并将插件固定到浏览器 3.安装Word的Zotero插件 4.在DBLP网站https://dblp.org/search 搜索需要添加的参考文献->点击BibTex->点击网页右上角的Zotero符号(即第二步所指的符号)->至…...
计算机网路概述
目录 计算机网络的概念 计算机网络的定义: 计算机网络的组成: 终端系统/资源子网 通信子网 计算机网络的类型 按照拓扑分类编辑 按照范国分类: 按传输方式进行分类 计算机网络体系结构 传输方式 按照传输方向区分 按照传输对象…...
832. 翻转图像 - 力扣
1. 题目 给定一个 n x n 的二进制矩阵 image ,先 水平 翻转图像,然后 反转 图像并返回 结果 。 水平翻转图片就是将图片的每一行都进行翻转,即逆序。 例如,水平翻转 [1,1,0] 的结果是 [0,1,1]。 反转图片的意思是图片中的 0 全部被…...
mumu 模拟器安装
1.下载安装 下载地址 Win 历史版本:http://mumu.163.com/update/win/Mac 历史 版本:http://mumu.163.com/20200515/25905_880858.html 2.设置为竖屏 在设置中心--界面设置页面设置宽720,高1280,DPI为240,如下图所示。…...
opencv实现图片的膨胀腐蚀
opencv实现图片的膨胀腐蚀 在OpenCV中,膨胀和腐蚀是两种基本的图像处理操作,通常用于二值图像中以提取特定的特征。它们是基于图像的形态学操作,使用一个称为结构元素或核的模板来改变图像的形状。 下面是如何使用OpenCV实现图片的膨胀和腐…...
[AIGC] Java常用的JSON库及简单示例
Java常用的JSON库及简单示例 在Java的世界里,JSON库广泛用于日常开发工作,本文将介绍几个常用的JSON库并配以简单的示例代码。 1. Gson Gson是Google提供的一个用来在Java对象和JSON数据之间进行转换的Java库。 它有一定的学习曲线,但一旦熟…...
Linux shell编程学习笔记50:who命令
0 前言 2024年的网络安全检查又开始了,对于使用基于Linux的国产电脑,我们可以编写一个脚本来收集系统的有关信息。比如,我们可以使用who命令来收集当前已登陆系统的用户信息,当前运行级别等信息。 1. who命令 的功能、格式和选项…...
vue使用webscoket
1. 创建 WebSocket 连接 首先,你需要在你的 Vue 组件中创建一个 WebSocket 连接。通常,这会在组件的 created 或 mounted 生命周期钩子中完成。 created() {this.socket new WebSocket(wss://your-websocket-url);this.socket.onopen () > {conso…...
第18章-综合以上功能 基于stm32的智能小车(远程控制、避障、循迹) 基于stm32f103c8t6/HAL库/CubeMX/超详细,包含代码讲解和原理图
这个是全网最详细的STM32项目教学视频。 第一篇在这里: 视频在这里 STM32智能小车V3-STM32入门教程-openmv与STM32循迹小车-stm32f103c8t6-电赛 嵌入式学习 PID控制算法 编码器电机 跟随 第18章-综合以上功能 18-按键和app按钮切换功能 根据上面介绍,我们的模式可…...
java并发工具类都有哪些
Java中的并发工具类包括: CountDownLatch CountDownLatch允许一个或多个线程等待其他线程完成某些操作。它通常用于线程间的同步,例如在一个线程完成其工作后通知其他线程继续执行。 CyclicBarrier CyclicBarrier是一个同步辅助类,它允许一…...
偏微分方程算法之抛物型方程差分格式编程示例一
目录 一、研究问题 二、C++代码 三、结果分析 一、研究问题 从本节开始将对具体的抛物型偏微分问题算例进行C++编程,以加深对抛物型偏微分方程差分格式构造的理解和应用。 采用向前欧拉格式计算抛物型方程初边值问题:...
数据结构—栈(C语言实现)
文章目录 前言一、栈的概念二、栈的代码实现Stack.hStack.c 三、使用栈解决有效的括号问题总结 前言 小伙伴们,大家好哇!!欢迎来到我的博客! 今天来分享一下另外一种数据结构—栈。主要包括栈的基本概念与其代码实现,…...
JVM学习-垃圾回收器(一)
垃圾回收器 按线程数分类 串行垃圾回收器 串行回收是在同一时间段内只允许有一个CPU用于执行垃圾回收操作,此时工作线程被暂停,直至垃圾收集工作结束 在诸如单CPU处理器或者较小的应用内存等硬件平台不是特别优越的场合,串行回收器的性能表…...
哈尔滨除甲醛本地推荐
新房装修完工本是喜事,但刺鼻异味与甲醛却令人困扰。哈尔滨冬季供暖期长,室内密闭时间长,甲醛释放周期可达3-15年,仅靠通风难以根除。许多业主在除甲醛时踩坑:要么找了不靠谱的游击队治理无效,要么被低价套…...
如何免费激活Windows和Office:3步实现永久激活的终极指南
如何免费激活Windows和Office:3步实现永久激活的终极指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows激活弹窗烦恼吗?是否遇到过Office突然变成只读模式…...
从入门到发烧:2026 Linux 必装 13 款播放器(VLC/MPV/Kodi 全覆盖)
Linux视频播放器选择多样,如榛名、MPlayer、VLC等,功能强大、支持多格式,满足各类用户需求 一、榛名视频播放器 榛名视频播放器是一款基于Qt的开源视频播放器,提供了许多基本功能。其特点包括支持Youtube-dl、控制播放速度、丰富…...
新手必学——git日常提交手册
对于编程新手来说,Git 是必备的开发工具,也是日常写代码、保存代码、同步代码的核心技能。很多新手写代码翻车、代码丢失、版本混乱、多人协作冲突,本质都是不会正确使用 Git 提交代码。这篇手册专为新手打造,不讲复杂原理&#x…...
Unity游戏运行时自动翻译引擎原理与实战配置
1. 为什么Unity游戏翻译不能只靠“改文本”——XUnity.AutoTranslator不是插件,而是运行时翻译引擎 你有没有试过打开一个Unity游戏的Assets文件夹,用文本编辑器搜索中文字符串,然后手动替换成英文?我试过三次,每次都在…...
全开源进销存源码ERP系统深度测评:部署实测+完整教程+二开
在中小企业数字化转型的浪潮中,ERP(企业资源计划)和进销存系统可以说是绝对的刚需。在开源世界里,隐藏着许多宝藏级的开源进销存ERP系统。今天,我们将选取一款基于 Laravel 10 MySQL构建的高颜值、高实用性开源进销存…...
Taotoken助力企业级AI应用开发,统一管理多个Agent的API成本与用量
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken助力企业级AI应用开发,统一管理多个Agent的API成本与用量 当团队同时运行多个基于不同大模型的智能体应用时&a…...
STM32F103C6T6模拟SPI驱动ADS1220:从硬件连接到代码调试的完整避坑指南
STM32F103C6T6模拟SPI驱动ADS1220:从硬件连接到代码调试的完整避坑指南 在嵌入式开发领域,高精度数据采集一直是工程师们面临的挑战之一。TI公司的ADS1220作为一款24位Δ-Σ模数转换器,以其出色的噪声性能和灵活的配置选项,成为许…...
yolo 源码与模型
YOLOv8 官方源码、预训练模型(.pt)、导出 ONNX 模型、以及 ROS2 C 部署源码(含检测框输出),全部是可直接用的工业级版本。 一、YOLOv8 官方源码(Ultralytics) 1. GitHub 源码地址(最…...
Local AI Needs to Be the Norm — A Beginner’s Guide for Developers
Local AI Needs to Be the Norm — A Beginner’s Guide for Developers You’ve probably noticed it: more and more developers are running large language models on their laptops—not as a curiosity, but as part of daily workflow. Not just toy experiments, but …...
