java学习之数据结构:二、链表

本节介绍链表

目录

1.什么是链表

1.1链表定义

1.2链表分类

2.链表实现

2.1创建链表

1)手动创建

2)创建链表类进行管理链表的相关操作

2.2添加元素

1)头插法

2)尾插法

3)任意位置插入

2.3删除

2.4查找

1)返回节点

2)返回索引


1.什么是链表

1.1链表定义

链表是一种数据结构,它由一系列节点组成。每个节点包含至少两部分信息:数据域(用于存储数据元素)和指针域(用于存储指向下一个节点的引用或地址)。链表通过节点之间的指针连接,形成一个链式结构。

与数组不同:1.数组中的元素在内存中是连续存储的,而链表的节点在内存中的存储位置不一定是连续的。2.链表它在插入和删除操作上相对数组更加灵活

1.2链表分类

  • 单向链表:也称为单链表,是最基本的链表形式。每个节点只包含一个指向下一个节点的指针,只能从链表的头节点开始,沿着指针依次访问后续节点,无法反向遍历。
  • 双向链表:在双向链表中,每个节点除了有一个指向后继节点的指针外,还有一个指向前驱节点的指针。这使得双向链表可以在两个方向上进行遍历,既可以从头节点向后遍历,也可以从尾节点向前遍历。
  • 循环链表:循环链表又分为单向循环链表和双向循环链表。单向循环链表的尾节点的指针指向头节点,形成一个环形结构,这样可以从任意一个节点出发,遍历整个链表。双向循环链表则是头节点的前驱指针指向尾节点,尾节点的后继指针指向头节点,同样实现了环形的结构,提供了更灵活的遍历方式。

2.链表实现

2.1创建链表

1)手动创建

即自己创建一个node类然后调用

package com.qcby;public class Node {Node next;int value;public static void main(String[] args) {Node node1 = new Node();node1.value = 1;Node node2 = new Node();node2.value = 2;node1.next = node2;System.out.println(node1.value);System.out.println(node1.toString());}public String toString() {return "Node[" +"next=" + next +", value=" + value +']';}
}

2)创建链表类进行管理链表的相关操作

使用 LinkList list = new LinkList(); 创建链表

2.2添加元素

1)头插法

头插法就是每次有一个新的元素进入链表时,将新节点插入到链表的头部,使其成为新的头节点。

代码如下:

	public void addHead(int value) {Node node=new Node(value);if(head==null) {head=node;return;}node.next=head;head=node;}

2)尾插法

当每次链表接受新的元素时,将新节点插入到链表的尾部,使其成为新的尾节点。

代码如下:

public void add(int data) {Node node = new Node();node.value = data;if (head == null) {head = node;} else {Node temp = head;while (temp.next != null) {temp = temp.next;}temp.next = node;}}

3)任意位置插入

在接收到新元素时,给新元素的位置做规定,即任意位置插入是将新节点插入到链表的指定位置。

代码:

public void addIndex(int index, int data) {Node node = new Node();node.value = data;if (index < 0 || index > getLength()) {System.out.println("超出范围");return;}if (index == 0) {addHead(data);} else {Node temp = head;for (int i = 0; i < index - 1; i++) {temp = temp.next;}node.next = temp.next;temp.next = node;}}

注意:想要实现任意位置插入,需要关注其链表长度,防止该插入位置比链表长度大出现问题

即实现一个求解长度的类,主要是通过遍历链表节点来记录长度:

    public int getLength() {int length = 0;Node temp = head;while (temp != null) {length++;temp = temp.next;}return length;}

2.3删除

public void remove(int data) {if (head == null) {System.out.println("链表为空");return;}if (head.value == data) {head = head.next;return;}Node temp = head;while (temp.next != null) {if (temp.next.value == data) {temp.next = temp.next.next;return;}temp = temp.next;}}

2.4查找

1)返回节点

    public Node find(int data) {Node temp = head;while (temp != null) {if (temp.value == data) {return temp;}temp = temp.next;}return null;}

2)返回索引

    public int findIndex(int data) {Node temp = head;int index = 0;while (temp != null) {if (temp.value == data) {return index;}temp = temp.next;index++;}return -1;}

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

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

相关文章

【计算机网络-应用层】解析HTTP会话保持:Cookie与Session的原理与实践

&#x1f4da; 博主的专栏 &#x1f427; Linux | &#x1f5a5;️ C | &#x1f4ca; 数据结构 | &#x1f4a1;C 算法 | &#x1f152; C 语言 | &#x1f310; 计算机网络 上篇文章&#xff1a;实现HTTP服务器 下篇文章&#xff1a;传输层协议-UDP 文章摘要&…

[ Qt ] | 第一个Qt程序

1. 创建Qt项目 我们打开Qt Create工具&#xff0c;左上角“文件”&#xff0c;新建文件。 --- --- --- --- 这个是我们的APP“走出国门”的时候&#xff0c;要关注的&#xff0c;这里就不说了。 后面这两个直接默认&#xff0c;下一步就行~~。 2. 项目默认内容 下面就是Qt C…

影刀RPA中新增自己的自定义指令

入门到实战明细 1. 影刀RPA自定义指令概述 1.1 定义与作用 影刀RPA的自定义指令是一种强大的功能&#xff0c;旨在提高流程复用率&#xff0c;让用户能够个性化定制指令&#xff0c;实现流程在不同应用之间的相互调用。通过自定义指令&#xff0c;用户可以将常用的、具有独立…

LangChain:重构大语言模型应用开发的范式革命

2022年10月22日,Harrison Chase在GitHub上提交了名为LangChain的开源项目的第一个代码版本。这个看似普通的代码提交,却悄然开启了一场重塑大语言模型(LLM)应用开发范式的技术革命。彼时,距离ChatGPT引爆全球人工智能浪潮尚有一月之遥,但LangChain的诞生已经预示了LLM技术…

区块链+医疗:破解数据共享困局,筑牢隐私安全防线

在医疗健康领域&#xff0c;数据共享与隐私保护一直是一对难以调和的矛盾。一方面&#xff0c;分散在不同机构的医疗数据&#xff08;如电子病历、检查报告、用药记录&#xff09;阻碍了诊疗效率和科研进展&#xff1b;另一方面&#xff0c;患者隐私泄露事件频发&#xff0c;加…

pycharm导入同目录下文件未标红但报错ModuleNotFoundError

此贴仅为记录debug过程&#xff0c;为防后续再次遇见 问题 问题情境 复现文章模型&#xff0c;pycharm项目初次运行 问题描述 在导入同目录下其它文件夹中的python文件时&#xff0c;未标红&#xff0c;但运行时报错ModuleNotFoundError 报错信息 未找到该模块 Traceback …

启发式算法-蚁群算法

蚁群算法是模拟蚂蚁觅食行为的仿生优化算法&#xff0c;原理是信息素的正反馈机制&#xff0c;蚂蚁通过释放信息素来引导同伴找到最短路径。把问题的元素抽象为多条路径&#xff0c;每次迭代时为每只蚂蚁构建一个解决方案&#xff0c;该解决方案对应一条完整的路径&#xff0c;…

Redis 脚本:深入理解与实践指南

Redis 脚本:深入理解与实践指南 引言 Redis 是一款高性能的键值存储数据库,广泛应用于缓存、消息队列、分布式锁等领域。脚本在 Redis 中扮演着至关重要的角色,它允许开发者以编程的方式执行复杂的操作,提高数据处理的效率。本文将深入探讨 Redis 脚本的概念、应用场景、…

Vue3 Echarts 3D立方体柱状图实现教程

文章目录 前言一、实现原理二、series ——type: "pictorialBar" 简介2.1 常用属性 三、代码实战3.1 封装一个echarts通用组件 echarts.vue3.2 实现一个立方体柱状图&#xff08;1&#xff09;首先实现一个基础柱状图&#xff08;2&#xff09;添加立方体棱线&#x…

每天一道面试题@第五天

1.包装类型的缓存机制了解么&#xff1f; 指部分包装类在创建对象时&#xff0c;会将一定范围内的对象缓存起来&#xff0c;当再次使用相同值创建对象时&#xff0c;优先从缓存中获取&#xff0c;而不是重新创建新对象。【提高性能】【节省内存】 列举几个常见的包装类缓存机…

mysql--索引

索引作为一种数据结构&#xff0c;其用途是用于提升检索数据的效率。 分类 普通索引&#xff08;INDEX&#xff09;&#xff1a;索引列值可重复 唯一索引&#xff08;UNIQUE&#xff09;&#xff1a;索引列值必须唯一&#xff0c;可以为NULL 主键索引&#xff08;PRIMARY KEY&a…

王道考研数据结构课后题代码题(2026版)——排序部分

一、前言 本合集以王道考研《数据结构》辅导书&#xff08;2026版&#xff09;课后习题代码题部分为参考依据&#xff0c;给出课后习题代码题的可执行代码的实现&#xff0c;本合集使用编程语言以C/C语言为主&#xff0c;也不限于使用Python和Java语言&#xff0c;本套合计代码…

AVFormatContext 再分析零

随着对于AVFormatContext 各个参数的学习&#xff0c;逐渐可以从 整体架构上 再认识一下 AVFormatContext 了。 还是从解封装的第一步开始。 int avformat_open_input(AVFormatContext **ps, const char *url, ff_const59 AVInputFormat *fmt, AVDictionary **options); 实际上…

uniapp打包apk详细教程

目录 1.打apk包前提条件 2.获取uni-app标识 3.进入dcloud开发者后台 4.开始打包 1.打apk包前提条件 1.在HBuilderX.exe软化中&#xff0c;登录自己的账号 2.在dcloud官网&#xff0c;同样登录自己的账号。没有可以免费注册。 2.获取uni-app标识 获取方法&#xff1a;点…

Vue2 和 Vue3 的核心区别

1. 响应式原理&#xff1a;从「手动挡」到「自动挡」 Vue2&#xff1a; 使用 Object.defineProperty 监听数据变化&#xff0c;但无法检测新增属性和数组索引修改&#xff0c;需要借助 Vue.set。 // Vue2 中修改数组元素不会触发视图更新 this.list[0] 新值; // ❌ 不…

EMMC存储性能测试方法

记于 2022 年 9 月 15 日 EMMC存储性能测试方法 - Wesley’s Blog 参考Android-emmc性能测试 | 一叶知秋进行实践操作 dd 命令 页面缓存 为了测试 emmc 的真实读写性能&#xff0c;我们需要先把页面缓存给清理&#xff1a; echo 1 > /proc/sys/vm/drop_caches console:…

软件管理(安装方式)

1.rpm安装 1.1.rpm介绍 rpm软件包名称: 软件名称 版本号(主版本、次版本、修订号) 操作系统 -----90%的规律 举例:openssh-6.6.1p1-31.el7.x86_64.rpm 数字是版本号:第一位主版本号,第二位次版本号,带横杠的是修订号, el几---操作系统的版本。 #用rpm安装需要考虑如下信…

OnlyOffice Document Server 源码调试指南-ARM和x86双模式安装支持

在ARM64架构下创建的ONLYOFFICE源码调试容器具有显著优势。该容器基于官方Document Server镜像构建&#xff0c;通过集成Git、Python和Node.js等工具链&#xff0c;实现跨平台环境一致性&#xff0c;确保ARM设备的兼容性。容器化隔离消除了依赖冲突&#xff0c;支持快速部署到边…

oracle 数据库查询指定用户下每个表占用空间的大小,倒序显示

oracle 查询指定用户下每个表占用空间的大小&#xff0c;倒序显示 使用场景&#xff1a;数据分析&#xff1b;导出医院正式库到开发环境时&#xff0c;查询出占用表空间高的业务表、导出时排除该表 在Oracle数据库中&#xff0c;要查询指定用户下每个表占用空间的大小并以倒序…

归并排序【逆序对】

目录 归并排序原理 逆序对 归并排序 主要利用分治思想&#xff0c;时间复杂度O(nlogn) 原理 1.对数列不断等长拆分&#xff0c;直到一个数的长度。2.回溯时&#xff0c;按升序合并左右两段。3.重复以上两个过程&#xff0c;直到递归结束。 合并 1.i&#xff0c;j分别指向a的…