java中链表的数据结构的理解

在 Java 中,链表是一种常见的数据结构,可以通过类的方式实现自定义链表。以下是关于 Java 中链表的数据结构和实现方式的详细介绍。


1. 自定义链表结构

Java 中链表通常由一个节点类 (ListNode) 和可能的链表操作类构成。

节点类 (ListNode)

这是链表的基本组成部分,每个节点包含数据域和指向下一个节点的引用。

class ListNode {int val; // 数据域ListNode next; // 指向下一个节点的引用// 构造函数ListNode() {}ListNode(int val) { this.val = val; }ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}

2. 单链表 (Singly Linked List)

单链表中,每个节点只指向下一个节点。

基本操作实现
class SinglyLinkedList {private ListNode head; // 头节点// 添加节点到链表末尾public void add(int val) {ListNode newNode = new ListNode(val);if (head == null) {head = newNode;} else {ListNode current = head;while (current.next != null) {current = current.next;}current.next = newNode;}}// 删除指定值的节点public void delete(int val) {if (head == null) return;if (head.val == val) {head = head.next;return;}ListNode current = head;while (current.next != null && current.next.val != val) {current = current.next;}if (current.next != null) {current.next = current.next.next;}}// 打印链表public void printList() {ListNode current = head;while (current != null) {System.out.print(current.val + " -> ");current = current.next;}System.out.println("null");}
}

3. 双链表 (Doubly Linked List)

双链表的每个节点有两个引用,一个指向前一个节点,另一个指向后一个节点。

节点类
class DoublyListNode {int val;DoublyListNode prev; // 指向前一个节点DoublyListNode next; // 指向下一个节点DoublyListNode(int val) { this.val = val; }
}
双链表操作
class DoublyLinkedList {private DoublyListNode head; // 头节点private DoublyListNode tail; // 尾节点// 添加到链表末尾public void add(int val) {DoublyListNode newNode = new DoublyListNode(val);if (head == null) {head = tail = newNode;} else {tail.next = newNode;newNode.prev = tail;tail = newNode;}}// 删除指定值的节点public void delete(int val) {DoublyListNode current = head;while (current != null && current.val != val) {current = current.next;}if (current == null) return; // 未找到if (current.prev != null) {current.prev.next = current.next;} else {head = current.next; // 删除头节点}if (current.next != null) {current.next.prev = current.prev;} else {tail = current.prev; // 删除尾节点}}// 打印链表public void printList() {DoublyListNode current = head;while (current != null) {System.out.print(current.val + " <-> ");current = current.next;}System.out.println("null");}
}

4. 使用 Java 标准库的链表

Java 提供了标准库中的 LinkedList 类,可以直接使用,不需要手动实现。

使用 LinkedList
import java.util.LinkedList;public class LinkedListExample {public static void main(String[] args) {LinkedList<Integer> list = new LinkedList<>();// 添加元素list.add(1);list.add(2);list.add(3);// 删除元素list.remove(Integer.valueOf(2));// 打印链表System.out.println(list); // 输出: [1, 3]}
}
特点
  • LinkedList 是双向链表,提供头尾操作支持。
  • 它实现了 List 接口和 Deque 接口,可用作队列和栈。

总结

  1. 自定义链表:适用于需要实现特定链表功能的场景。
    • 单链表:每个节点只有 next 引用。
    • 双链表:每个节点有 nextprev 引用,操作更加灵活。
  2. Java 标准库 LinkedList:提供开箱即用的链表操作,适合一般用途。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/62306.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

结构方程模型(SEM)入门到精通:lavaan VS piecewiseSEM、全局估计/局域估计;潜变量分析、复合变量分析、贝叶斯SEM在生态学领域应用

目录 第一章 夯实基础 R/Rstudio简介及入门 第二章 结构方程模型&#xff08;SEM&#xff09;介绍 第三章 R语言SEM分析入门&#xff1a;lavaan VS piecewiseSEM 第四章 SEM全局估计&#xff08;lavaan&#xff09;在生态学领域高阶应用 第五章 SEM潜变量分析在生态学领域…

2.mybatis整体配置

文章目录 mybatis-config.xml介绍SqlSessionFactoryBuilderXMLConfigBuilderpropertiessetting类型别名&#xff08;typeAliases&#xff09;扫描插件(plugins)解析objectFactory(对象工厂)解析objectWrapperFactory解析reflectorFactorysettingsElement()方法环境配置&#xf…

把本地新项目初始化传到github

在本地项目根目录下初始化Git仓库 git init将项目文件添加到Git仓库,接下来&#xff0c;你需要将项目中的文件添加到Git仓库中。可以使用git add命令来添加文件或目录。如果你想要添加所有文件&#xff0c;可以使用.来表示当前目录中的所有文件&#xff1a; git add .提交项目…

软件测试丨Pytest 第三方插件与 Hook 函数

Pytest不仅是一个用于编写简单和复杂测试的框架&#xff0c;还有大量的第三方插件以及灵活的Hook函数供我们使用&#xff0c;这些功能大大增强了其在软件测试中的应用。通过使用Pytest&#xff0c;测试开发变得简便、安全、高效&#xff0c;同时也能帮助我们更快地修复Bug&…

小米PC电脑手机互联互通,小米妙享,小米电脑管家,老款小米笔记本怎么使用,其他品牌笔记本怎么使用,一分钟教会你

说在前面 之前我们体验过妙享中心&#xff0c;里面就有互联互通的全部能力&#xff0c;现在有了小米电脑管家&#xff0c;老款的笔记本竟然用不了&#xff0c;也可以理解&#xff0c;毕竟老款笔记本做系统研发的时候没有预留适配的文件补丁&#xff0c;至于其他品牌的winPC小米…

python爬虫案例——猫眼电影数据抓取之字体解密,多套字体文件解密方法(20)

文章目录 1、任务目标2、网站分析3、代码编写1、任务目标 目标网站:猫眼电影(https://www.maoyan.com/films?showType=2) 要求:抓取该网站下,所有即将上映电影的预约人数,保证能够获取到实时更新的内容;如下: 2、网站分析 进入目标网站,打开开发者模式,经过分析,我…

一分钟食用前端测试框架Jest

安装 其实食用Jest是很简单的,我们只需要安装Jest即可 npm install --save-dev jestyarn add --dev jestpnpm add --save-dev jest ESmodule 本身来说,Jest是不支持Esmodule的,他支持CommonJS,我们需要Babel改一下 npm i --save-dev babel-jest babel/core babel/preset-env …

MySQL中的ROW_NUMBER窗口函数简单了解下

ROW_NUMBER() 是 MySQL8引入的窗口函数之一&#xff0c;它为查询结果集中的每一行分配一个唯一的顺序号&#xff08;行号&#xff09;。这个顺序号是基于窗口函数的 ORDER BY 子句进行排序的&#xff0c;可以根据指定的排序顺序生成连续的整数值。 ROW_NUMBER() 在分页、去重、…

从 App Search 到 Elasticsearch — 挖掘搜索的未来

作者&#xff1a;来自 Elastic Nick Chow App Search 将在 9.0 版本中停用&#xff0c;但 Elasticsearch 拥有你构建强大的 AI 搜索体验所需的一切。以下是你需要了解的内容。 生成式人工智能的最新进展正在改变用户行为&#xff0c;激励开发人员创造更具活力、更直观、更引人入…

CTF之密码学(费纳姆密码)

一、作为二进制替换密码的费纳姆密码 定义&#xff1a;费纳姆密码是一种由二进制产生的替换密码&#xff0c;也被称为弗纳姆密码&#xff08;Vernam cipher&#xff09;。它采用二进制表示法&#xff0c;将明文转化为二进制数字&#xff0c;并通过与密钥进行模2加法运算来产生密…

若依框架部署在网站一个子目录下(/admin)问题(

部署在子目录下首先修改vue.config.js文件&#xff1a; 问题一&#xff1a;登陆之后跳转到了404页面问题&#xff0c;解决办法如下&#xff1a; src/router/index.js 把404页面直接变成了首页&#xff08;大佬有啥优雅的解决办法求告知&#xff09; 问题二&#xff1a;退出登录…

【贪心算法第六弹——334.递增的三元子序列(easy)】

目录 1.题目解析 题目来源 测试用例 2.算法原理 3.实战代码 代码解析 本题属于最长递增子序列的简化版本&#xff0c;只需要判断能不能组成三位的递增子序列即可&#xff0c;建议先去看博主的另一篇博客可以更好的理解本篇博客&#xff1a;300.最长递增子序列 1.题目解析…

c++(斗罗大陆)

这次&#xff0c;作者编了斗罗大陆的武魂、魂力等级&#xff0c;目前只写到了11级 #include<iostream> #include<conio.h> #include<windows.h> #include<stdlib.h> #include<stdio.h> #include<time.h> #include<strin…

Perl编程语言简介

文章目录 前言基础语法一. 变量1. 标量2. 数组3. 哈希 二. 控制结构1. 条件语句2. 循环语句 三. 自定义函数与作用域四. 文件读写五. 正则表达式1. 模式匹配2. 替换 六. 模块和包七. 面向对象的编程 总结 前言 Perl&#xff08;Practical Extraction and Report Language&…

《TCP/IP网络编程》学习笔记 | Chapter 16:关于 I/O 流分离的其他内容

《TCP/IP网络编程》学习笔记 | Chapter 16&#xff1a;关于 I/O 流分离的其他内容 《TCP/IP网络编程》学习笔记 | Chapter 16&#xff1a;关于 I/O 流分离的其他内容分离 I/O 流2 次 I/O 流分离分离「流」的好处「流」分离带来的 EOF 问题 文件描述符的的复制和半关闭终止「流」…

LeetCode数组题

参考链接 代码随想录 讲解视频链接 数组题 1、(两数之和)给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。你可以假设每种输入只会对应一个答案&#xff0c;并且你不能使用…

Unity-Lightmap入门篇

&#xff1a;&#xff1a;这是一个实战文章&#xff0c;并没有知识分享&#xff0c;或理论知识&#xff1b;完全没有 关键字&#xff1a; “lightmap","全局光照”&#xff0c;“light Probe" (会混合一些中英文搜索&#xff0c;或者全英文搜索&#xff09; …

海康VsionMaster学习笔记(学习工具+思路)

一、前言 VisionMaster算法平台集成机器视觉多种算法组件&#xff0c;适用多种应用场景&#xff0c;可快速组合算法&#xff0c;实现对工件或被测物的查找测量与缺陷检测等。VM算法平台依托海康威视在图像领域多年的技术积淀&#xff0c;自带强大的视觉分析工具库&#xff0c;可…

Python双向链表、循环链表、栈

一、双向链表 1.作用 双向链表也叫双面链表。 对于单向链表而言。只能通过头节点或者第一个节点出发&#xff0c;单向的访问后继节点&#xff0c;每个节点只能记录其后继节点的信息&#xff08;位置&#xff09;&#xff0c;不能向前遍历。 所以引入双向链表&#xff0c;双…

爬虫技术深度解析:XPath与CSS选择器的结合优势

在现代网络爬虫技术中&#xff0c;数据提取的准确性和效率至关重要。XPath和CSS选择器作为两种主流的元素定位工具&#xff0c;在爬虫领域中扮演着重要角色。本文将深入探讨XPath和CSS选择器在爬虫中的结合优势&#xff0c;并提供详细的代码示例&#xff0c;以帮助开发者更好地…