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

数据结构(Java实现)LinkedList与链表(下)


在这里插入图片描述
**加粗样式
**
在这里插入图片描述


在这里插入图片描述

在这里插入图片描述


在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


在这里插入图片描述

在这里插入图片描述


在这里插入图片描述
结论
让一个指针从链表起始位置开始遍历链表,同时让一个指针从判环时相遇点的位置开始绕环运行,两个指针都是每次均走一步,最终肯定会在入口点的位置相遇。

在这里插入图片描述


LinkedList的模拟实现
单个节点的实现
在这里插入图片描述


在这里插入图片描述

在这里插入图片描述


尾插
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
运行结果如下:
在这里插入图片描述


在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


在这里插入图片描述

在这里插入图片描述
也可以暴力使用
在这里插入图片描述


全部代码
MyLinkedList

public class MyLinkedList {static class ListNode{public  int val;public ListNode prev;public ListNode next;public ListNode(int val) {this.val = val;}}public  ListNode head;public  ListNode last;//链表的长度public int size(){int len=0;ListNode cur=head;while(cur!=null){cur=cur.next;len++;}return len;}//打印链表public  void dispaly(){ListNode cur=head;while(cur!=null){System.out.print(cur.val+" ");cur=cur.next;}System.out.println();}//查找关键字key是否在链表中public boolean contains(int key){ListNode cur=head;while(cur!=null){if(cur.val==key){return true;}cur=cur.next;}return false;}//头插
public void addFirst(int data){ListNode node=new ListNode(data);//空链表if(head==null){head=node;last=node;return;}//一般情况node.next=head;head.prev=node;head=node;}//尾插public void addLast(int data){ListNode node=new ListNode(data);//空链表if(head==null){head=node;last=node;return;}//一般情况last.next=node;node.prev=last;last=node;}
//无论是头插还是尾插,只要是空链表,那么新增节点的next和prev都引用自身//任意位置的插入,在位置后面插入public void AddIndex(int index,int data){ListNode node=new ListNode(data);if(index<0||index>size()){throw new IndexOutOfBounds("任意位置插入,坐标非法,非法值为"+index);}if(index==0){addFirst(data);return;}if(index==size()){addLast(data);return;}//一般情况ListNode cur=head;while(index!=0){cur=cur.next;index--;}node.next=cur;cur.prev.next=node;node.prev=cur.prev;cur.prev=node;}//删除第一次出现关键字为key的节点public void remove(int key){//链表为空if(head==null){return;}//只有一个节点并且该节点值为keyif(head.next==null&&head.val==key){head.prev=null;head.next=null;return;}//头节点if(head.val==key){head.next.prev=null;head=head.next;return;}//尾节点if(last.val==key){last.prev.next=null;last=last.prev;return;}//一般情况ListNode cur=head;while(cur!=null){if(cur.val==key){cur.prev.next=cur.next;cur.next.prev=cur.prev;return;}cur=cur.next;}}//删除所有出现关键字为key的节点public void removeAll(int key){//链表为空if(head==null){return;}//只有一个节点并且该节点值为keyif(head.next==null&&head.val==key){head.prev=null;head.next=null;return;}//头节点if(head.val==key){head.next.prev=null;head=head.next;}//尾节点if(last.val==key){last.prev.next=null;last=last.prev;}//一般情况ListNode cur=head;while(cur!=null){if(cur.val==key){cur.prev.next=cur.next;cur.next.prev=cur.prev;}cur=cur.next;}}//clearpublic  void clear(){
/*        ListNode cur=head;while(cur!=null){ListNode curNext=cur.next;//存储下一个节点,方便下次循环使用cur.prev=null;cur.next=null;cur=curNext;//更新当前节点}*/head=null;last=null;//使头节点和尾节点的地址置空}}

IndexOutOfBounds

public class IndexOutOfBounds extends  RuntimeException{public IndexOutOfBounds() {}public IndexOutOfBounds(String message) {super(message);}
}

Test1

public class Test1 {public static void main(String[] args) {MyLinkedList myLinkedList=new MyLinkedList();myLinkedList.addFirst(34);myLinkedList.addFirst(3);myLinkedList.addFirst(4);myLinkedList.addFirst(340);myLinkedList.addFirst(344);myLinkedList.dispaly();System.out.println(myLinkedList.size());System.out.println(myLinkedList.contains(4));System.out.println("我是分割线");myLinkedList.addLast(-12);myLinkedList.addLast(-121);myLinkedList.addLast(-1222);myLinkedList.dispaly();myLinkedList.AddIndex(3,999);myLinkedList.dispaly();// myLinkedList.AddIndex(55,999);System.out.println("我是分割线");myLinkedList.remove(999);myLinkedList.dispaly();myLinkedList.remove(344);myLinkedList.dispaly();myLinkedList.addFirst(-12);myLinkedList.addLast(-12);myLinkedList.dispaly();myLinkedList.removeAll(-12);myLinkedList.dispaly();System.out.println("我是分割线");myLinkedList.clear();myLinkedList.dispaly();System.out.println("证明有空行");}
}

什么是LinkedList
LinkedList的底层是双向链表结构(链表后面介绍),由于链表没有将元素存储在连续的空间中,元素存储在单独的节点中,然后通过引用将节点连接起来了,因此在在任意位置插入或者删除元素时,不需要搬移元素,效率比较高。


LinkedList的使用
在这里插入图片描述


LinkedList的其他常用方法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


LinkedList的遍历
在这里插入图片描述


ArrayList和LinkedList的区别
在这里插入图片描述


相关文章:

数据结构(Java实现)LinkedList与链表(下)

** ** 结论 让一个指针从链表起始位置开始遍历链表&#xff0c;同时让一个指针从判环时相遇点的位置开始绕环运行&#xff0c;两个指针都是每次均走一步&#xff0c;最终肯定会在入口点的位置相遇。 LinkedList的模拟实现 单个节点的实现 尾插 运行结果如下&#xff1a; 也…...

linux查看正在运行的nginx在哪个文件夹当中

1、查出Nginx进程PID ps -ef|grep nginx2、查看Nginx进程启动时的工作目录 ls -la /proc/<PID>/cwd将<PID>替换为第一步中列出的Nginx进程的PID。该命令会显示Nginx进程在启动时所在的工作目录&#xff08;当前工作目录&#xff09;...

Vue实现Excel表格中按钮增加小数位数,减少小数位数功能,多用于处理金融数据

效果图 <template><div><el-button click"increaseDecimals">A按钮</el-button><el-button click"roundNumber">B按钮</el-button><el-table :data"tableData" border><el-table-column v-for&q…...

自然语言处理(一):词嵌入

词嵌入 词嵌入&#xff08;Word Embedding&#xff09;是自然语言处理&#xff08;NLP&#xff09;中的一种技术&#xff0c;用于将文本中的单词映射到一个低维向量空间中。它是将文本中的单词表示为实数值向量的一种方式。 在传统的文本处理中&#xff0c;通常使用独热编码&…...

【HSPCIE仿真】HSPICE仿真基础

HSPICE概述 1. HSPICE简介3. 标准输入文件4. 标准输出文件3. HSPCIE仿真过程 1. HSPICE简介 SPICE &#xff08;Simulation Program with IC Emphasis&#xff09;是1972 年美国加利福尼亚大学柏克莱分校电机工程和计算机科学系开发 的用于集成电路性能分析的电路模拟程序。 …...

二、前端监控之方案调研

前端监控体系 一个完整的前端监控体系包括了日志采集、日志上报、日志存储、日志切分&计算、数据分析、告警等流程。 对于一名前端开发工程师来说&#xff0c;也就意味着工作不再局限于前端业务的开发工作&#xff0c;需要有Nginx服务运维能力、实时/离线分析能力、Node应…...

npm 创建 node.js 项目

package.json重要说明 package.json是创建任何node.js项目必须要有的一个文件。 因为在package.json文件中&#xff0c;有详细的项目描述&#xff0c; 包括&#xff1a; (1)项目名称&#xff1a;name (2)版本&#xff1a;version (3)依赖文件&#xff1a;dependencies 等…...

JMeter性能测试(上)

一、基础简介 界面 打开方式 双击 jmeter.bat双击 ApacheJMeter.jsr命令行输入 java -jar ApacheJMeter.jar 目录 BIN 目录&#xff1a;存放可执行文件和配置文件 docs目录&#xff1a;api文档&#xff0c;用于开发扩展组件 printable-docs目录&#xff1a;用户帮助手册 li…...

自定义date工具类 DateUtils.java

自定义date工具类 DateUtils.java 简介 Date日期类型的工具类。 api 日期格式化 format(Date date)&#xff1b;日期格式化 format(Date date, String pattern)&#xff1b;计算距离现在多久&#xff0c;非精确 getTimeBefore(Date date);计算距离现在多久&#xff0c;精确…...

Linux(Ubuntu)安装docker

2017年的3月1号之后&#xff0c;Docker 的版本命名开始发生变化&#xff0c;同时将 CE 版本和 EE 版本进行分开。 Docker社区版&#xff08;CE&#xff09;&#xff1a;为了开发人员或小团队创建基于容器的应用,与团队成员分享和自动化的开发管道。docker-ce 提供了简单的安装…...

Apache Poi 实现Excel多级联动下拉框

由于最近做的功能&#xff0c;需要将接口返回的数据列表&#xff0c;输出到excel中&#xff0c;以供后续导入&#xff0c;且网上现有的封装&#xff0c;使用起来都较为麻烦&#xff0c;故参考已有做法封装了工具类。 使用apache poi实现excel联动下拉框思路 创建隐藏单元格&a…...

常见的 HTML<meta> 标签的 name 属性及其作用

HTML中的 <meta> 标签可以通过 name 属性提供元数据&#xff0c;这些元数据可以用于指定有关文档的信息&#xff0c;以及控制浏览器和搜索引擎的行为。name 属性通常与其他属性一起使用&#xff0c;如 content、charset、http-equiv 等&#xff0c;以提供更具体的元数据信…...

【网络安全】理解报文加密、数字签名能解决的实际问题

文章目录 前言1. 防止报文泄露 —— 加密体系的出现1.1 理解非对称加密体系的实施难点1.2 加密体系的实际应用 2. 防止报文被篡改 —— 数字签名的出现2.1 数字签名的原理2.2 数字签名的实施难点2.2 数字签名的实际应用 —— 引入摘要算法 3. 实体鉴别 —— CA证书 后记 前言 …...

linux中安装nodejs,卸载nodejs,更新nodejs

卸载nodejs 卸载node sudo apt-get remove nodejs清理掉自动安装的并且不需要软件包 sudo apt autoremove查看node相关的文件 sudo whereis node如果有文件需要手动删除文件 删除该文件命令 sudo rm -rf /usr/local/bin/node在此查看node -v 是未找到&#xff0c;说明你已经…...

浅谈Python网络爬虫应对反爬虫的技术对抗

在当今信息时代&#xff0c;数据是非常宝贵的资源。而作为一名专业的 Python 网络爬虫程序猿&#xff0c;在进行网页数据采集时经常会遭遇到各种针对爬虫行为的阻碍和限制&#xff0c;这就需要我们掌握一些应对反爬机制的技术手段。本文将从不同层面介绍如何使用 Python 进行网…...

代理池在过程中一直运行

Hey&#xff0c;爬虫达人们&#xff01;在爬虫的过程中&#xff0c;要保持代理池的稳定性可不容易。今天就来和大家分享一些实用经验&#xff0c;教你如何让代理池在爬虫过程中一直运行&#xff01;方法简单易行&#xff0c;让你的爬虫工作更顺畅. 在进行爬虫工作时&#xff0…...

基于Java+SpringBoot+Vue前后端分离党员教育和管理系统设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…...

【flutter直接上传图片到阿里云OSS】

flutter直接上传文件到阿里云需要获取凭证&#xff0c;通过调用阿里云获取凭证的接口能拿到下面这些参数 {"StatusCode": 200,"AccessKeyId": "STS.NSsrKZes4cqm.....","AccessKeySecret": "7eGnLZaEFsRCGYJAnrtdE9n....."…...

【MySQL系列】表的内连接和外连接学习

「前言」文章内容大致是对MySQL表的内连接和外连接。 「归属专栏」MySQL 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 一、内连接二、外连接2.1 左外连接2.2 右外连接 一、内连接 内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选&#xff0c;前面篇章学习的…...

C语言日常刷题 3

文章目录 题目答案与解析1234、5、6、 题目 1.已知函数的原型是&#xff1a; int fun(char b[10], int *a); &#xff0c;设定义&#xff1a; char c[10];int d; &#xff0c;正确的调用语句是&#xff08; &#xff09; A: fun(c,&d); B: fun(c,d); C: fun(&c,&d…...

2025.12晶晨S905L3S-L3SB安卓9通刷实战:当贝桌面加持,解锁多品牌盒子新玩法

1. 晶晨S905L3S-L3SB通刷包的前世今生 第一次听说晶晨S905L3S-L3SB芯片能通刷时&#xff0c;我正对着家里三台不同品牌的电视盒子发愁。这些盒子有的来自运营商赠送&#xff0c;有的是二手市场淘来的&#xff0c;虽然硬件配置相近&#xff0c;但系统体验天差地别。直到发现这个…...

郭老师-我们为什么要爱国?

我们为什么要爱国&#xff1f; ——因为家在&#xff0c;根在&#xff0c;魂在“你可以不爱你的管家&#xff0c; 但必须爱你家的房子。”&#x1f33f; 国家如屋&#xff0c;人民为主&#xff0c; 执政者不过管家—— 而这屋&#xff0c;是我们的命脉所系。&#x1f3e0; 一、…...

效率倍增:基于快马平台集成最新openclaw构建自动化采集工具

最近在做一个数据采集项目时&#xff0c;发现手动写爬虫实在太费时间了。每次都要重复处理请求头、代理设置、数据清洗这些基础工作&#xff0c;效率特别低。后来发现了openclaw这个工具包的新版本&#xff0c;正好结合InsCode(快马)平台快速搭建了一个自动化采集工具&#xff…...

如何突破设备限制?打造你的全场景跨平台开发中枢

如何突破设备限制&#xff1f;打造你的全场景跨平台开发中枢 【免费下载链接】code-server VS Code in the browser 项目地址: https://gitcode.com/GitHub_Trending/co/code-server 在多设备开发的时代&#xff0c;远程开发环境已成为连接不同终端的核心枢纽&#xff0…...

HUNYUAN-MT 7B翻译终端Python爬虫数据清洗实战:多语言文本归一化处理

HUNYUAN-MT 7B翻译终端Python爬虫数据清洗实战&#xff1a;多语言文本归一化处理 1. 引言 你有没有遇到过这种情况&#xff1f;辛辛苦苦用Python爬虫从全球各地的网站、论坛、社交媒体上抓取了一大堆数据&#xff0c;准备做分析或者训练模型&#xff0c;结果打开一看&#xf…...

STEP3-VL-10B实际作品集:MMBench 92.05分视觉识别能力高清图文输出示例

STEP3-VL-10B实际作品集&#xff1a;MMBench 92.05分视觉识别能力高清图文输出示例 1. 引言&#xff1a;当AI“看懂”了世界 你有没有想过&#xff0c;让AI像人一样“看懂”一张图片&#xff0c;到底有多难&#xff1f; 这不仅仅是识别出图片里有什么东西那么简单。比如给你…...

SmolVLA代码审查助手:自动检测C语言基础代码缺陷

SmolVLA代码审查助手&#xff1a;让C语言开发告别低级错误 写C语言代码&#xff0c;最怕什么&#xff1f;不是复杂的算法&#xff0c;也不是深奥的架构&#xff0c;而是那些不起眼却要命的基础错误。一个忘记释放的内存&#xff0c;一个数组越界的访问&#xff0c;或者一个不符…...

永磁同步电机这玩意儿现在工业上用得是真多,今天咱们来点硬核的,手搓个IPMSM的数学模型。先别急着关页面,代码实现和调试坑点都给你备好了

IPMSM数学模型&#xff0c;模拟电机对不同输入的响应&#xff0c;包含速度环和电流环&#xff0c;输出电流转速和转矩。先甩几个核心方程镇楼。d-q轴电压方程&#xff1a; def voltage_equation(t, state, Vd, Vq):id, iq, w_r, theta stateVd ... # 这里放你的控制算法输出V…...

WordPress 短代码与函数重复声明问题的解决方案

在开发 WordPress 博客或网站时,经常会遇到需要将复杂的PHP代码转换为短代码,以便在页面或文章中轻松使用。然而,这其中可能隐藏着一些棘手的问题,比如函数重复声明错误。在这篇博客中,我们将深入探讨这个问题,并提供一个实用的解决方案。 问题描述 假设我们有一个功能…...

正交试验DOE在算法参数优化中的高效应用

1. 正交试验DOE&#xff1a;算法调参的"聪明捷径" 第一次接触算法参数优化时&#xff0c;我像大多数人一样陷入了暴力搜索的陷阱。记得当时调一个简单的随机森林模型&#xff0c;5个参数各试5个值&#xff0c;总共需要3125次训练&#xff01;直到发现正交试验设计&am…...