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

LinkedList

    • LinkedList的模拟实现(底层是一个双向链表)
    • LinkedList使用

LinkedList的模拟实现(底层是一个双向链表)

无头双向链表:有两个指针;一个指向前一个节点的地址;一个指向后一个节点的地址。
在这里插入图片描述
节点定义和链表初始化

class ListNode{int val;ListNode prev;ListNode next;public ListNode(int val) {this.val = val;}}ListNode head;ListNode tail;public void createList(){//初始化链表
ListNode ListNode1=new ListNode(1);ListNode ListNode2=new ListNode(1);ListNode ListNode3=new ListNode(1);ListNode ListNode4=new ListNode(1);ListNode ListNode5=new ListNode(1);ListNode ListNode6=new ListNode(1);ListNode1.next=ListNode2;ListNode2.next=ListNode3;ListNode3.next=ListNode4;ListNode4.next=ListNode5;ListNode5.next=ListNode6;//还要绑定prevListNode6= ListNode5.prev;ListNode5= ListNode4.prev;ListNode4= ListNode3.prev;ListNode3= ListNode2.prev;ListNode2= ListNode1.prev;tail=ListNode6;//指向尾节点this.head=ListNode1;
}

打印链表:

        public void myprintf(){ListNode cur=head;while(cur!=null){System.out.println(cur.val+"");cur=cur.next;}}

头插法:分两种情况,1:有多个节点;需要修改3个地方;2:没有节点的时候插入。tail是我们定义的尾巴,
1:head指向
2:原来头节点的null位置指向
3:插入的这个节点的next域
在这里插入图片描述

        //头插法public void addFirst(int data) {ListNode node = new ListNode(data);if (head == null) {//空链表的情况下头插head = node;tail = node;} else {//首先我们知道3个东西需要修改;改之前好好想一下这个东西还有没有作用;如果有你就不能先改;或者把值存起来node.next = head;head.prev = node;head = node;}}

尾插法:和头插差不多;也是分两种情况;1:空链表;2:有多个节点情况;需要修改3个地方

     //尾插法public void addLast(int data){ListNode node = new ListNode(data);if (head == null) {//空链表的情况下尾插,情况一样head = node;tail = node;} else {//这时候我们的指向尾的指针就有用了tail.next=node;node.prev=tail.prev;tail=node;//尾插后,尾得更新一下,这个容易忘}}

任意位置插入:分空链表(单独处理)和多个节点(需要先遍历找到位置;需要修改4个指向)。我们需要判断一下插入的位置合法不合法

     //任意位置插入,第一个数据节点为0号下标public boolean addIndex(int index,int data){//index位置合法性ListNode node = new ListNode(data);if (head == null) {//空链表的情况下尾插,情况一样head = node;tail = node;return true;}if(index<0||index>size()){System.out.println("插入的位置不合法");return false;}if(index==0){//头插addFirst( data);return true;}if(index==size()) {//尾插addLast (data);return true;}ListNode cur1=select( index);node.next=cur1;//前驱节点我不知道怎么表示//prev指向前驱的地址,前驱地址又可以.prev/.next//cur1.prev.next       cur1.prev找到前一个的地址,cur1.prev.next=node;node.prev=cur1.prev;cur1.prev=node;return true;}

找位置:

        public ListNode select(int index){ListNode cur=head;while(index>0){cur=cur.next;}return cur;}

删除第一次出现值为key节点:
我们先不考虑头尾:先考虑中间情况

前驱的next等于当前的next,跳过中间
在这里插入图片描述

cur.next前驱等于cur前驱
在这里插入图片描述
在这里插入图片描述
算上头尾情况的:整体代码
在这里插入图片描述
上述代码还不够:只有一个节点的情况lhead.prev;没有前驱;空指针异常;(都没有前驱;上述代码还要找前驱);在第7行代码还得再套一层娃
在这里插入图片描述

清除函数:
在这里插入图片描述
为什么单向链表清除能直接head=null;而双向链表不能head=null、tail=null缺不行?
理论上单向链表也是要将所有的节点都置为null;双向链表为了更好1及时释放内存空间;就是正常情况下head=null和tail=null它的中间节点也是会被垃圾回收器回收的

LinkedList使用

在这里插入图片描述

在这里插入图片描述

带参数构造方法,实现这个接口的都可以传进来;顺序表实现了这个接口,所以把顺序表传过去也行,链表,顺序表add都是默认尾插的。
在这里插入图片描述
foreach遍历:
在这里插入图片描述
迭代器遍历:
在这里插入图片描述
反向遍历
在这里插入图片描述
ArrysList和LinkedList区别:
增删改查上、储存上呢:
在这里插入图片描述

相关文章:

LinkedList

LinkedList的模拟实现&#xff08;底层是一个双向链表&#xff09;LinkedList使用 LinkedList的模拟实现&#xff08;底层是一个双向链表&#xff09; 无头双向链表&#xff1a;有两个指针&#xff1b;一个指向前一个节点的地址&#xff1b;一个指向后一个节点的地址。 节点定…...

创作新纪元:知乎、阅文加码AI大模型,撬动创作者经济

输入几个关键词就能生成一篇文章、一篇新闻、一篇小说&#xff0c;ChatGPT自诞生以来文本生成能力一直备受赞誉&#xff0c;ChatGPT要替代记者、编辑、作家的言论愈演愈烈&#xff0c;甚至有一些互联网企业宣布砍掉记者、编辑、文案等岗位全面拥抱AIGC。 目前ChatGPT是否会全面…...

PAT(Advanced Level) Practice(with python)——1067 Sort with Swap(0, i)

Code # 输入有毒&#xff0c;需避坑 # N int(input()) L list(map(int,input().split())) N L[0] L L[1:] res 0 for i in range(1,N):while L[0]!0:# 把所有不在正常位置下的数换到正常t L[0]L[0],L[t] L[t],L[0]res1if L[i]!i:# 换完全后如果对应位置下的数不是目标…...

Python爬取斗罗大陆全集

打开网址http://www.luoxu.cc/dmplay/C888H-1-265.html F12打开Fetch/XHR&#xff0c;看到m3u8&#xff0c;ts&#xff0c;一眼顶真&#xff0c;打开index.m3u8 由第一个包含第二个index.m3u8的地址&#xff0c;ctrlf在源代码中一查index&#xff0c;果然有&#xff0c;不过/…...

前馈神经网络解密:深入理解人工智能的基石

目录 一、前馈神经网络概述什么是前馈神经网络前馈神经网络的工作原理应用场景及优缺点 二、前馈神经网络的基本结构输入层、隐藏层和输出层激活函数的选择与作用网络权重和偏置 三、前馈神经网络的训练方法损失函数与优化算法反向传播算法详解避免过拟合的策略 四、使用Python…...

顺序栈Sequential-stack

0、节点结构体定义 typedef struct SqStack{int *base;int *top; } SqStack; 1、初始化 bool InitStack(SqStack &S) {S.base new int[Maxsize]; //eg. #define Maxsize 100if(!S.base){return false;}S.top S.base;return true; } 2、入栈 bool Push(SqStack &…...

关于工牌(必须5-10个字)

今天蹲坑&#xff0c;低头看了下工牌觉得挺有意思&#xff1a;我从啥时候起也不排斥将工牌挂在脖子上了&#xff1f; 工牌&#xff0c;一个标识。不仅标识了你&#xff0c;也标识了你所在的群体。如果你认可这个群体&#xff0c;佩戴它那是一种荣誉、荣耀&#xff1b;如果你不…...

PHP混淆加密以及常用的一些加密工具

PHP混淆加密是一种将源代码转换为难以理解和阅读的方式&#xff0c;以保护代码的安全性。以下是一些常见的PHP混淆加密方法&#xff1a; 代码压缩&#xff1a;使用代码压缩工具&#xff08;如UglifyJS&#xff09;将PHP代码压缩为一行&#xff0c;去除空格、换行符等可读性的字…...

无涯教程-PHP - ereg()函数

ereg() - 语法 int ereg(string pattern, string originalstring, [array regs]); ereg()函数在string指定的字符串中搜索pattern指定的字符串&#xff0c;如果找到pattern&#xff0c;则返回true&#xff0c;否则返回false。搜索对于字母字符区分大小写。 可选的输入参数re…...

【Ubuntu】简洁高效企业级日志平台后起之秀Graylog

简介 Graylog 是一个用于集中式日志管理的开源平台。在现代数据驱动的环境中&#xff0c;我们需要处理来自各种设备、应用程序和操作系统的大量数据。Graylog提供了一种方法来聚合、组织和理解所有这些数据。它的核心功能包括流式标记、实时搜索、仪表板可视化、告警触发、内容…...

TCP特点UDP编程

目录 1、tcp协议和udp协议 2、多线程并发和多进程并发&#xff1a; &#xff08;1&#xff09;多进程并发服务端 &#xff08;2&#xff09;多进程并发客户端&#xff1a; 3、tcp: 4、粘包 5、UDP协议编程流程 (1)服务器端&#xff1a; (2)客户端&#xff1a; 6、tcp状…...

超级计算机

超级计算机是一种高性能计算机&#xff0c;它能够以极高的速度执行大规模的计算任务。超级计算机通常由数千个甚至数百万个处理器组成&#xff0c;这些处理器能够同时处理大量的数据&#xff0c;从而实现高效的计算。超级计算机广泛应用于科学、工程、金融、天气预报等领域&…...

LeetCode863. 二叉树中所有距离为 K 的结点(相关话题:深度遍历,广度遍历)

题目描述 给定一个二叉树(具有根结点 root), 一个目标结点 target ,和一个整数值 k 。 返回到目标结点 target 距离为 k 的所有结点的值的列表。 答案可以以 任何顺序 返回。 示例 1: 输入:root = [3,5,1,6,2,0,8,null,null,7,4], target = 5, k = 2 输出:[7,4,1] 解释…...

Kotlin 基础学习

NULL检查机制 Kotlin的空安全设计对于声明可为空的参数&#xff0c;在使用是进行空判断处理&#xff0c;有两种处理方式&#xff0c;字段后加 !! 像 java 一样抛出空异常&#xff0c;另外字段后面加 ? 可不做处理返回值为 null 或者配合 ?: 做空判断处理。 //类型后面加 ? 表…...

CW6B-90A-RCW6B-100A-RCW6B-110A-RCW6B-115A-R三相三线式滤波器

CW4B-10A-S CW4B-20A-S CW4B-30A-S三相三线式滤波器 CW6B-50A-S CW6B-60A-S CW6B-70A-S CW6B-80A-S CW6B-90A-S CW6B-100A-S CW6B-250A-S三相三线式滤波器 CW12B-3A-S(005) CW12B-6A-S(005) CW12B-10A-S(005) CW12B-20A-S(005 CW12B-30A-S(005) CW12B-40A-S(005)三…...

DP读书:鲲鹏处理器 架构与编程(九)鲲鹏920处理器片上系统

鲲鹏920片上系统 鲲鹏920处理器片上系统的组织与管理鲲鹏920片上系统的配置鲲鹏处理器多芯片系统鲲鹏2P多芯片系统鲲鹏4P多芯片系统鲲鹏920处理器片上系统和I/O桥组成的多芯片系统 鲲鹏920处理器的管理和安全架构鲲鹏920片上系统的PMU 鲲鹏920处理器片上系统的输入与输出鲲鹏92…...

【HBZ分享】java中的BitSet 与 Redis中的BitMap 与 布隆过滤器

BitMap的存储原理 bitMap他会标识出某个整数是否存在&#xff0c;存在即为1&#xff0c;不存在对应位即为0bitMap是存储int类型的&#xff0c;int 4byte&#xff0c; 1byte 8bit&#xff0c;因此bitMap数组中的每个下标可以标识出32个数字是否存在bitMap相当于一个个小格子&…...

《Linux从练气到飞升》No.16 Linux 进程地址空间

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的…...

【算法题】7004. 判别首字母缩略词

题目&#xff1a; 给你一个字符串数组 words 和一个字符串 s &#xff0c;请你判断 s 是不是 words 的 首字母缩略词 。 如果可以按顺序串联 words 中每个字符串的第一个字符形成字符串 s &#xff0c;则认为 s 是 words 的首字母缩略词。例如&#xff0c;“ab” 可以由 [“a…...

ClickHouse(二十一):Clickhouse SQL DDL操作-临时表及视图

进入正文前&#xff0c;感谢宝子们订阅专题、点赞、评论、收藏&#xff01;关注IT贫道&#xff0c;获取高质量博客内容&#xff01; &#x1f3e1;个人主页&#xff1a;含各种IT体系技术&#xff0c;IT贫道_Apache Doris,大数据OLAP体系技术栈,Kerberos安全认证-CSDN博客 &…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中&#xff0c;合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号&#xff1f; 最小权限原则&#xf…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)

RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发&#xff0c;后来由Pivotal Software Inc.&#xff08;现为VMware子公司&#xff09;接管。RabbitMQ 是一个开源的消息代理和队列服务器&#xff0c;用 Erlang 语言编写。广泛应用于各种分布…...

C# 表达式和运算符(求值顺序)

求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如&#xff0c;已知表达式3*52&#xff0c;依照子表达式的求值顺序&#xff0c;有两种可能的结果&#xff0c;如图9-3所示。 如果乘法先执行&#xff0c;结果是17。如果5…...

日常一水C

多态 言简意赅&#xff1a;就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过&#xff0c;当子类和父类的函数名相同时&#xff0c;会隐藏父类的同名函数转而调用子类的同名函数&#xff0c;如果要调用父类的同名函数&#xff0c;那么就需要对父类进行引用&#…...

在 Spring Boot 项目里,MYSQL中json类型字段使用

前言&#xff1a; 因为程序特殊需求导致&#xff0c;需要mysql数据库存储json类型数据&#xff0c;因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...