当前位置: 首页 > news >正文

【Java 数据结构】LinkedList 类 和 模拟实现链表

 🔥博客主页🔥:【 坊钰_CSDN博客 】

欢迎各位点赞👍评论✍收藏⭐

目录

1. 什么是 LinkedList ?

2 LinkedList 的使用

2.1 LinkedList 的构造

 2.2 LinkedList 的常用方法

2.3 LinkedList 的遍历

3. 单链表的模拟实现

3.1 基本框架

3.2 头插

3.3 尾插

3.4 在第 pos 位后面插入 val

3.5 打印

3.6 求大小

4. 全部源码

5. 小结


1. 什么是 LinkedList ?

对于存储数据来说,ArrayList 是有缺陷的,ArrayList 动态扩容时可能会有空间的损失,而 LinkedList 的元素存储在特定的节点中,通过引用来联系元素之间的关系,效率较高

LinkedList 也是实现了 List 接口

  •  LinkedList 的底层是使用了双链表
  • LinkedList 适合多次频繁插入和删除的场景

2 LinkedList 的使用

2.1 LinkedList 的构造

LinkedList 有两种构造方法

LinkedList()                            //空构造方法
LinkedList(Collection<? extends E>)     //以链表进行构造(必须为 E 的子类)
public class Test {public static void main(String[] args) {// 空构造LinkedList list1 = new LinkedList();// 以链表来构造LinkedList list2 = new LinkedList(list1);}}

 2.2 LinkedList 的常用方法

LinkedList 的常用方法 和 ArrayList的常用方法 基本一样,有兴趣可以看一下上一篇博客

【Java 数据结构】ArrayList 类 与 模拟实现顺序表-CSDN博客

2.3 LinkedList 的遍历

public class Test {public static void main(String[] args) {LinkedList<Integer> list = new LinkedList<>();list.add(1);list.add(2);list.add(3);list.add(4);list.add(5);// for-each 遍历for(Integer x : list)System.out.print(x);//使用迭代器遍历ListIterator<Integer> it = list.listIterator();while (it.hasNext()) {System.out.print(it.next() + " ");}}
}

3. 单链表的模拟实现

3.1 基本框架

public class MyLinkedList {public static class LinkedNode {int value;LinkedNode next;LinkedNode(int value) {this.value = value;}}
}

3.2 头插

/** 头插* */public void addInsert(int val) {LinkedNode node = new LinkedNode(val);if (head == null) {head = node;} else {node.next = head;head = node;}
}

3.3 尾插

/** 尾插* */public void fastInsert(int val) {LinkedNode node = new LinkedNode(val);if (head == null) {head = node;} else {LinkedNode ret = head;while (ret.next != null) {ret = ret.next;}ret.next = node;}
}

3.4 在第 pos 位后面插入 val

/** 在第 pos 位后面插入 val* */public void posInsert(int pos,int val) {LinkedNode node = new LinkedNode(val);if (pos <= 0 || pos > linkSize()) {System.out.println("Pos is No !");return;}if (pos == linkSize()) {fastInsert(val);return;}int count = pos - 1;LinkedNode ret = head;while (count != 0) {ret = ret.next;count--;}node.next = ret.next;ret.next = node;}

3.5 打印

/** 打印* */public void printList() {LinkedNode ret = head;while (ret != null) {System.out.print(ret.value+" ");ret = ret.next;}System.out.println();
}

3.6 求大小

/** 求大小* */public int linkSize() {int count = 0;LinkedNode ret = head;while (ret != null) {count++;ret = ret.next;}return count;
}

4. 全部源码

public class MyLinkedList {public static class LinkedNode {int value;LinkedNode next;LinkedNode(int value) {this.value = value;}}LinkedNode head;/** 打印* */public void printList() {LinkedNode ret = head;while (ret != null) {System.out.print(ret.value+" ");ret = ret.next;}System.out.println();}/** 求大小* */public int linkSize() {int count = 0;LinkedNode ret = head;while (ret != null) {count++;ret = ret.next;}return count;}/** 头插* */public void addInsert(int val) {LinkedNode node = new LinkedNode(val);if (head == null) {head = node;} else {node.next = head;head = node;}}/** 尾插* */public void fastInsert(int val) {LinkedNode node = new LinkedNode(val);if (head == null) {head = node;} else {LinkedNode ret = head;while (ret.next != null) {ret = ret.next;}ret.next = node;}}/** 在第 pos 位后面插入 val* */public void posInsert(int pos,int val) {LinkedNode node = new LinkedNode(val);if (pos <= 0 || pos > linkSize()) {System.out.println("Pos is No !");return;}if (pos == linkSize()) {fastInsert(val);return;}int count = pos - 1;LinkedNode ret = head;while (count != 0) {ret = ret.next;count--;}node.next = ret.next;ret.next = node;}
}

5. 小结

以上就是对 ArrayList 类 和 顺序表 的了解,具体还需宝子们去实践,如果觉得该博客对你有用的话,希望一键三连,点个关注不迷路,谢谢支持  

相关文章:

【Java 数据结构】LinkedList 类 和 模拟实现链表

&#x1f525;博客主页&#x1f525;&#xff1a;【 坊钰_CSDN博客 】 欢迎各位点赞&#x1f44d;评论✍收藏⭐ 目录 1. 什么是 LinkedList &#xff1f; 2 LinkedList 的使用 2.1 LinkedList 的构造 2.2 LinkedList 的常用方法 2.3 LinkedList 的遍历 3. 单链表的模拟实现…...

VS2022 中的 /MT /MTd /MD /MDd 选项

我们有时编译时,需要配置这个 运行库,指定C/C++运行时库的链接方式。 如下图 那么这些选项的含义是什么? /MT:静态链接多线程库 /MT选项代表“Multi-threaded Static”,即多线程静态库。选择此选项时,编译器会从运行时库中选择多线程静态连接库来解释程序中的代码,…...

产品初探Devops!以及AI如何赋能Devops?

DevOps源自Development&#xff08;开发&#xff09;和Operations&#xff08;运维&#xff09;的组合&#xff0c;是一种新的软件工程理念&#xff0c;旨在打破传统软件工程方法中“开发->测试->运维”的割裂模式&#xff0c;强调端到端高效一致的交付流程&#xff0c;实…...

两种不同的LuaBehaviour生命周期绑定

在学习xLua时&#xff0c;发现xLua和LoxodonFramework的LuaBehaviour稍微有些不同&#xff0c;其中一个点是在调用DoString方法时的区别 1. xLua的版本中 直接使用Lua脚本环境进行绑定&#xff0c;这时候的Lua脚本调用生命周期函数是这样的 直接在Lua脚本中写函数就行 2. Lo…...

Effective C++ 条款31:将文件间的编译依存关系降至最低

文章目录 条款31&#xff1a;将文件间的编译依存关系降至最低最小化编译依赖关系的最佳实践通过减少编译依赖的好处总结 条款31&#xff1a;将文件间的编译依存关系降至最低 为了减少编译依赖关系&#xff0c;应该将接口与实现分离&#xff0c;并尽量减少头文件之间的依赖。这…...

python数据分析之爬虫基础:scrapy详解

一、爬虫工程化 在之前的爬虫学习中基本已经掌握了爬虫这门技术的大多数技术点&#xff0c;但是我们现在写的代码还很流程化&#xff0c;很难进行商用&#xff0c;想要爬虫达到商用级别&#xff0c;必须要对我们现在编写的爬虫进行大刀阔斧式的重组&#xff0c;以达到工程化的…...

openwrt 负载均衡方法 openwrt负载均衡本地源接口

openwrt 负载均衡方法 openwrt负载均衡本地源接口_mob6454cc647bdb的技术博客_51CTO博客 本人注重原理分析&#xff0c;要求对其原理掌握&#xff0c;否则按教程操作&#xff0c;你怕是什么都学不会&#xff0c;仔细看&#xff0c;认真记比较好。 首先确认一下基本细节 1、路由…...

Linux高级--3.3.2.6高并发编程之“内存屏障”“CPU屏障”“编译屏障”

一、内存屏障 在 Linux C 语言编程 中&#xff0c;内存屏障&#xff08;Memory Barrier&#xff09; 是一种用于控制内存访问顺序的技术。它主要用于多处理器系统中&#xff0c;确保某些操作按预期顺序执行&#xff0c;避免 CPU 和编译器对内存访问进行优化&#xff0c;从而影…...

【含开题报告+文档+PPT+源码】基于SpringBoot的智能安全与急救知识科普系统设计与实现

开题报告 在全球范围内&#xff0c;安全与急救知识的普及已成为提升公众安全素养、减少意外伤害发生率、提高突发事件应对能力的重要举措。尤其是在当今社会&#xff0c;人们面临的生活、工作环境日益复杂&#xff0c;交通事故、火灾、溺水、突发疾病等各种意外事件的发生概率…...

EMQX5.X版本性能配置调优参数

EMQX 主配置文件为 emqx.conf&#xff0c;根据安装方式其所在位置有所不同&#xff1a; 安装方式配置文件所在位置DEB 或 RPM 包安装/etc/emqx/emqx.confDocker 容器/opt/emqx/etc/emqx.conf解压缩包安装./etc/emqx.conf EMQ X 消息服务器默认占用的 TCP 端口包括: 端口 说明…...

电脑配置maven-3.6.1版本

不要使用太高的版本。 apache-maven-3.6.1-bin.zip 下载这个的maven压缩包 使用3.6.1版本。 解压缩放在本地软甲目录下面&#xff1a; 配置系统环境变量 在系统环境下面配置MAVEN_HOME 点击path 新增一条 在cmd中输入 mvn -v 检查maven的版本 配置阿里云镜像和本地的仓库 …...

水电站视频智能监控系统方案设计与技术应用方案

一、背景需求 水电站作为国家重要的能源基地&#xff0c;其安全运行对于保障能源供应和社会稳定具有重要意义。然而&#xff0c;传统的人工监控方式存在着诸多问题&#xff0c;如人力成本高、监控范围有限、反应不及时等。因此&#xff0c;水电站急需引进一种先进的视频智能监控…...

React 组件通信完整指南 以及 自定义事件发布订阅系统

React 组件通信完整指南 1. 父子组件通信 1.1 父组件向子组件传递数据 // 父组件 function ParentComponent() {const [data, setData] useState(Hello from parent);return <ChildComponent message{data} />; }// 子组件 function ChildComponent({ message }) {re…...

华为 AI Agent:企业内部管理的智能变革引擎(11/30)

一、华为 AI Agent 引领企业管理新潮流 在当今数字化飞速发展的时代&#xff0c;企业内部管理的高效性与智能化成为了决定企业竞争力的关键因素。华为&#xff0c;作为全球领先的科技巨头&#xff0c;其 AI Agent 技术在企业内部管理中的应用正掀起一场全新的变革浪潮。 AI Ag…...

【Pandas】pandas Series empty

Pandas2.2 Series Attributes 方法描述Series.index每个数据点的标签或索引Series.array对象底层的数据数组Series.values以NumPy数组的形式访问Series中的数据值Series.dtype用于获取 Pandas Series 中数据的类型&#xff08;dtype&#xff09;Series.shape用于获取 Pandas …...

Git如何设置和修改当前分支跟踪的上游分支

目录 前言 背景 设置当前分支跟踪的上游分支 当前分支已有关联&#xff0c;删除其关联&#xff0c;重新设置上游 常用的分支操作 参考资料 前言 仅做学习记录&#xff0c;侵删 背景 在项目开发过程中&#xff0c;从master新建分支时&#xff0c;会出现没有追踪的上游分…...

GitHub新手用法详解【适合新手入门-建议收藏!!!】

目录 什么是Github&#xff0c;为什么使用它&#xff1f; 一、GitHub账号的注册与登录 二、 gitbash安装详解 1.git bash的下载与安装 2.git常用命令 3. Git 和 GitHub 的绑定 1. 获取SSH keys 2.绑定ssh密钥 三、通过Git将代码提交到GitHub 1.克隆仓库 2.测试提交代码…...

游戏开发线性空间下PS工作流程

前言 使用基于物理的渲染&#xff0c;为了保证光照计算的准确&#xff0c;需要使用线性空间&#xff1b; 使用线性空间会带来一个问题&#xff0c;ui 在游戏引擎中的渲染结果与 PS 中的不一致&#xff1a; PS&#xff08;颜色空间默认是sRGB伽马空间&#xff09;&#xff1a…...

7-10 最长公共子序列

目录 题目描述 输入格式: 输出格式: 输入样例: 输出样例: 解题思路&#xff1a; 详细代码&#xff1a; 题目描述 给出 1~n 的两个排列 P1 和 P2&#xff0c;求它们的最长公共子序列。 n 在 5~1000 之间。 输入格式: 第一行是一个数 n 接下来两行&#xff0c;每行为 n 个数&…...

亚远景-ISO 21434标准下的汽车网络安全:风险评估与管理的关键实践

ISO 21434标准&#xff0c;全称为ISO/SAE 21434 "Road Vehicles - Cybersecurity Engineering"&#xff0c;是国际标准化组织(ISO)发布的针对汽车领域的标准&#xff0c;旨在指导汽车制造商、供应商和相关利益相关方在汽车系统中应用适当的网络安全措施。在ISO 21434…...

ClickHouse数据报表实战:如何把分组后的明细‘压缩’成一行摘要(附完整SQL)

ClickHouse数据报表实战&#xff1a;高效聚合多行文本的工程化解决方案 在数据分析与报表生成的实际业务场景中&#xff0c;我们经常遇到这样的需求&#xff1a;需要将同一维度下的多条文本明细&#xff08;如用户行为日志、错误信息、月份列表等&#xff09;合并成一条简洁的摘…...

使用Python轻松管理Word页脚

在日常的办公自动化中&#xff0c;处理Word文档是许多人绕不开的环节。无论是生成报告、合同&#xff0c;还是制作项目文档&#xff0c;Word都是一个不可或缺的工具。然而&#xff0c;当文档数量庞大&#xff0c;或者需要频繁更新时&#xff0c;那些看似简单的重复性任务&#…...

抖音内容采集工具的技术创新与合规应用实践

抖音内容采集工具的技术创新与合规应用实践 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. 抖音批量下载工具&…...

Ostrakon-VL-8B本地化部署详解:从OpenClaw社区获取模型到一键启动

Ostrakon-VL-8B本地化部署详解&#xff1a;从OpenClaw社区获取模型到一键启动 最近有不少朋友在问&#xff0c;怎么把社区里那些热门的视觉语言大模型&#xff0c;比如Ostrakon-VL-8B&#xff0c;真正部署到自己的服务器或者云平台上&#xff0c;做成一个随时能用的服务。确实…...

如何实现格式保留翻译?Hunyuan MT1.5结构化文本处理实战解析

如何实现格式保留翻译&#xff1f;Hunyuan MT1.5结构化文本处理实战解析 1. 引言&#xff1a;当翻译遇到格式难题 你有没有遇到过这样的尴尬场景&#xff1f;好不容易找到一款翻译工具&#xff0c;把英文网页翻译成了中文&#xff0c;结果发现所有链接都失效了&#xff0c;排…...

Qwen3-ASR-1.7B效果展示:实测多语言语音识别,准确率超高

Qwen3-ASR-1.7B效果展示&#xff1a;实测多语言语音识别&#xff0c;准确率超高 1. 开篇&#xff1a;一款让人惊艳的语音识别模型 最近测试了Qwen3-ASR-1.7B这款语音识别模型&#xff0c;结果让我大吃一惊。作为一款中等规模的模型&#xff0c;它在多语言识别上的表现完全不输…...

March7thAssistant:崩坏:星穹铁道企业级自动化解决方案

March7thAssistant&#xff1a;崩坏&#xff1a;星穹铁道企业级自动化解决方案 【免费下载链接】March7thAssistant 崩坏&#xff1a;星穹铁道全自动 三月七小助手 项目地址: https://gitcode.com/gh_mirrors/ma/March7thAssistant 【核心价值定位】游戏工作室效率倍增引…...

Pixel Couplet Gen入门必看:Streamlit Components封装像素春联React组件

Pixel Couplet Gen入门必看&#xff1a;Streamlit Components封装像素春联React组件 1. 项目介绍 Pixel Couplet Gen是一款基于ModelScope大模型驱动的创意春联生成器。与传统春联设计不同&#xff0c;它采用了独特的8-bit像素游戏风格&#xff0c;将中国传统春节元素与复古电…...

Linux 内核遍历宏介绍

Linux内核中的遍历宏全面详解 Linux内核中大量使用遍历宏&#xff08;Iteration Macros&#xff09;来简化数据结构的遍历操作。这些宏提供了类型安全、简洁且高效的遍历方式&#xff0c;是内核编程的核心范式之一。一、遍历宏的分类 1.1 按功能分类 Linux内核遍历宏 ├── 链…...

3步搭建PP-DocLayoutV3服务:快速体验文档版面分析的强大能力

3步搭建PP-DocLayoutV3服务&#xff1a;快速体验文档版面分析的强大能力 1. 引言&#xff1a;文档版面分析的价值 在日常工作中&#xff0c;我们经常需要处理各种文档——合同、论文、报告、书籍等。传统OCR技术虽然能识别文字&#xff0c;但往往无法理解文档的结构&#xff…...