Java实现的双向链表示例
双向链表(Doubly Linked List)是一种链式数据结构,每个节点都包含两个指针,一个指向前一个节点,一个指向后一个节点。双向链表与单向链表相比,除了有前向指针外,还有一个额外的后向指针,这使得双向链表在某些操作上比单向链表更加灵活。
双向链表的优点包括:
1.双向遍历:双向链表可以通过前向指针和后向指针双向遍历,这在某些情况下比单向链表更加方便。
2.插入和删除操作效率高:相对于数组,在双向链表中插入和删除操作的时间复杂度为 O(1),因为只需要修改相邻节点的指针即可。
3.删除操作更灵活:与单向链表相比,双向链表在删除节点时,可以直接通过前向指针找到前一个节点,因此不需要遍历查找前一个节点,删除操作更加方便。
4.可以双向遍历:除了支持正向遍历外,双向链表还支持逆向遍历,这在某些情况下非常有用。
双向链表的缺点包括:
1.空间开销较大:相对于单向链表,双向链表每个节点需要额外存储一个指向前一个节点的指针,因此占用的内存空间更大。
2.插入和删除操作需要更多指针操作:由于双向链表需要维护两个指针,因此在插入和删除操作时需要更多的指针操作。
3.实现复杂度较高:相对于单向链表,双向链表的实现稍微复杂一些,因为需要维护两个指针。
总的来说,双向链表适用于需要频繁进行插入、删除或双向遍历操作的场景,但需要注意的是,双向链表的空间开销较大,因此在内存有限的情况下,需要权衡使用。
下面是双向链表简单实现示例
public class DoublyLinkedList {private static class Node {// 需要存储的数据int data;// 前一个节点Node prev;// 后一个节点Node next;// 构造函数public Node(int data) {this.data = data;this.prev = null;this.next = null;}}// 头节点private Node head;// 尾节点private Node tail;// 构造函数public DoublyLinkedList() {this.head = null;this.tail = null;}// 在链表尾部添加节点public void append(int data) {// 创建新节点Node newNode = new Node(data);// 如果链表为空 则新节点为头节点和尾结点if (head == null) {head = newNode;tail = newNode;} else {// 否则将新节点添加到链表尾部tail.next = newNode;newNode.prev = tail;tail = newNode;}}// 打印链表内容(从头到尾)public void printForward() {Node current = head;System.out.print("Forward: ");while (current != null) {System.out.print(current.data + " ");current = current.next;}System.out.println();}// 打印链表内容(从尾到头)public void printBackward() {Node current = tail;System.out.print("Backward: ");while (current != null) {System.out.print(current.data + " ");current = current.prev;}System.out.println();}public static void main(String[] args) {DoublyLinkedList list = new DoublyLinkedList();list.append(1);list.append(2);list.append(3);list.append(4);list.append(5);list.printForward();list.printBackward();}
}
运行一下

相关文章:
Java实现的双向链表示例
双向链表(Doubly Linked List)是一种链式数据结构,每个节点都包含两个指针,一个指向前一个节点,一个指向后一个节点。双向链表与单向链表相比,除了有前向指针外,还有一个额外的后向指针…...
生物电信号测量技术
引言 生物电信号是生物体内的电活动产生的电流或电压信号,它反映了生物体的生理状态和活动。生物电信号测量技术是一种用于记录和分析这些信号的方法,广泛应用于医学、生物学、神经科学等领域。本文将介绍几种常见的生物电信号测量技术,并讨…...
【开源】JAVA+Vue.js实现创意工坊双创管理系统
目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 管理员端2.2 Web 端2.3 移动端 三、系统展示四、核心代码4.1 查询项目4.2 移动端新增团队4.3 查询讲座4.4 讲座收藏4.5 小程序登录 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的创意工坊双创管理…...
Python基于opencv的人脸识别上课签到考勤系统,附源码
博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…...
【HTML】HTML基础7.2(有序列表)
目录 标签 效果 注意 标签 <ol> <li>列表内容</li> <li>列表内容</li> <li>列表内容</li> <li>列表内容</li> 。。。。。。 </ol> 效果 代码 <ol><li>银河护卫队 10000000000</li><l…...
ucode usage使用方法
需结合代码和main函数的命令行去快速理解该库; main.c 和example中的代码示例 源代码的地址:https://github.com/jow-/ucode.git 翻译地址:https://github.com/jow-/ucode/blob/master/docs/tutorials/01-usage.md ucode命令行提供了一系列的…...
HCIA-HarmonyOS设备开发认证V2.0-习题
目录 习题一习题二习题三(待续...)坚持就有收获 习题一 # HarmonyOS简介 1. 以下哪几项属于OpenHarmony的技术特性?()A. 统一OS,弹性部署B. 一次开发,多端部署C. 硬件互助,资源共享…...
【深度学习笔记】优化算法——随机梯度下降
随机梯度下降 在前面的章节中,我们一直在训练过程中使用随机梯度下降,但没有解释它为什么起作用。为了澄清这一点,我们刚在 :numref:sec_gd中描述了梯度下降的基本原则。本节继续更详细地说明随机梯度下降(stochastic gradient d…...
oss-fuzz-gen:一款基于LLM的模糊测试对象生成与评估框架
关于oss-fuzz-gen oss-fuzz-gen是一款基于LLM的模糊测试对象生成与评估框架,该工具可以帮助广大研究人员使用多种大语言模型(LLM)生成真实场景中的C/C项目以执行模糊测试。 该工具基于Google的OSS-Fuzz平台实现其功能,并对生成的…...
深度神经网络 基本知识 记录
资料:https://www.bilibili.com/video/BV1K94y1Z7wn/?spm_id_from333.337.search-card.all.click&vd_source14a476de9132ba6b2c3cbc2221750b99 计划:3~4天 杂 人工智能包括ML,ML包括DL机器学习需要人工大量参与,DL模拟人的…...
基于Springboot免费搭载轻量级阿里云OSS数据存储库(将本地文本、照片、视频、音频等上传云服务保存)
一、注册阿里云账户 打开https://www.aliyun.com/,申请阿里云账户并完成实名认证(个人)。这种情况就是完成了: 二、开通OSS服务 点击立即开通即可。 三、创建Bucket 申请id和secert: 进去创建一个Accesskey就会出现以…...
RK3568 Android12 适配抖音 各大APP
RK3568 Android12 适配抖音 各大APP SOC RK3568 system:Android 12 平台要适配抖音和各大APP 平台首先打开抖音发现摄像头预览尺寸不对只存在右上角,我将抖音APP装在手机上预览,发现是全屏 一开始浏览各大博客 给出的解决方法是修改framework 设置为全屏显示: framewo…...
[渗透教程]-022-内网穿透的高性能的反向代理应用
frp 简介 frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。 项目地址 https://github.com/fatedier/frp安装 linux 配置方式见如下链接🔗 frp安装配置…...
【计算机网络】深度学习HTTPS协议
💓 博客主页:从零开始的-CodeNinja之路 ⏩ 收录文章:【计算机网络】深度学习HTTPS协议 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 一:HTTPS是什么二:HTTPS的工作过程三:对称加密四:非对称加密五:中间人攻击1…...
C盘新建的文件夹内需要管理员权限才能新建和删除解决问题记录
命令行输入命令gpedit.msc 如果执行成功那么直接看第二步 如果出现不存在此文件 那么用记事本将一以下代码粘贴进去,后缀命名为cmd。文件名无所谓,双击运行 echo offpushd "%~dp0"dir /b C:\Windows\servicing\Packages\Microsoft-Windows-Gr…...
2024年【道路运输企业安全生产管理人员】考试报名及道路运输企业安全生产管理人员免费试题
题库来源:安全生产模拟考试一点通公众号小程序 道路运输企业安全生产管理人员考试报名参考答案及道路运输企业安全生产管理人员考试试题解析是安全生产模拟考试一点通题库老师及道路运输企业安全生产管理人员操作证已考过的学员汇总,相对有效帮助道路运…...
四面体单元悬臂梁的Matlab有限元编程 | 实体单元 | Matlab源码 | 理论文本
专栏导读 作者简介:工学博士,高级工程师,专注于工业软件算法研究本文已收录于专栏:《有限元编程从入门到精通》本专栏旨在提供 1.以案例的形式讲解各类有限元问题的程序实现,并提供所有案例完整源码;2.单元…...
BurpSuite2024.2.1
1.更新介绍 此版本引入了特定的API 扫描功能,并将 Bambdas 合并到 Logger 捕获过滤器中。我们还改进了 DOM Invader 和 Burp Suite 导航记录器的功能,并进行了许多其他改进和错误修复。 API扫描 我们引入了特定的 API 扫描功能。您现在可以上传 OpenAP…...
【投稿优惠|火热征稿】2024年计算机技术与自动化发展国际会议 (ICCTAD 2024)
2024年计算机技术与自动化发展国际会议 (ICCTAD 2024) 2024 International Conference on Computer Technology and Automation Development (ICCTAD 2024) 【会议简介】 2024年计算机技术与自动化发展国际会议( ICCTAD 2024)将在中国武汉盛大开幕!这是一场在自动化…...
LeetCode.232. 用栈实现队列
题目 232. 用栈实现队列 分析 先了解一下栈和队列的特点: 栈:先进后出队列:先进先出 想用栈实现队列的特点,就需要使用两个栈。因为两个栈就可以将列表倒序。 假设第一个栈 s1 [1,2,3],第二个栈 s2 [] 。若循环…...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...
uniapp手机号一键登录保姆级教程(包含前端和后端)
目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
【Linux系统】Linux环境变量:系统配置的隐形指挥官
。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量:setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...
Xela矩阵三轴触觉传感器的工作原理解析与应用场景
Xela矩阵三轴触觉传感器通过先进技术模拟人类触觉感知,帮助设备实现精确的力测量与位移监测。其核心功能基于磁性三维力测量与空间位移测量,能够捕捉多维触觉信息。该传感器的设计不仅提升了触觉感知的精度,还为机器人、医疗设备和制造业的智…...
