【Java】/* 双向链表 - 底层实现 */
【难点】:remove、removeAllKey
一、IList
package bagfive;/*** Created with IntelliJ IDEA.* Description:* User: tangyuxiu* Date: 2024-08-21* Time: 20:30*/
public interface IList<E> {//头插法void addFirst(E data);//尾插法void addLast(E data);//任意位置插入,第一个数据节点为0号下标void addIndex(int pos,E data);//查找是否包含关键字key是否在单链表当中boolean contains(E key);//删除第一次出现关键字为key的节点void remove(E key);//删除所有值为key的节点void removeAllKey(E key);//得到单链表的长度int size();void display();void clear();
}
二、MyLinkedList
package bagfive;/*** Created with IntelliJ IDEA.* Description:* User: tangyuxiu* Date: 2024-08-21* Time: 20:30*/
public class MyLinkedList<E> implements IList<E> {/* 使用内部类定义双向链表节点 */private static class ListNode<E> {E val;ListNode<E> prev;ListNode<E> next;public ListNode(E val) {this.val = val;}}private ListNode<E> head;private ListNode<E> last;@Overridepublic void addFirst(E data) {ListNode<E> newNode = new ListNode<>(data);//1. 如果链表为nullif (this.head == null) {this.head = this.last = newNode;return;}//2. 链表不为nullnewNode.next = this.head;this.head.prev = newNode;this.head = newNode;}@Overridepublic void addLast(E data) {ListNode<E> newNode = new ListNode<>(data);//1. 如果链表为nullif (this.head == null) {this.head = this.last = newNode;return;}//2. 链表不为nullthis.last.next = newNode;newNode.prev = this.last;this.last = newNode;}/* 判断add的位置是否合法 */private boolean addIndexIsLegal(int pos) {if (pos < 0 || pos > this.size()) {return false;}return true;}@Overridepublic void addIndex(int pos, E data) {//1. 判断pos位置是否合法if (!this.addIndexIsLegal(pos)) {return;}//2. pos == 0if (pos == 0) {this.addFirst(data);return;}//3. pos == size()if (pos == this.size()) {this.addLast(data);return;}//4. 其他位置,不需要找前驱节点了ListNode<E> newNode = new ListNode<>(data);ListNode<E> cur = this.head;for (int i = 0; i < pos; i++) {cur = cur.next;}newNode.next = cur;cur.prev.next = newNode;newNode.prev = cur.prev;cur.prev = newNode;}@Overridepublic boolean contains(E key) {ListNode<E> cur = this.head;while (cur != null) {if (cur.val.equals(key)) {return true;}cur = cur.next;}return false;}@Overridepublic void remove(E key) {// 头,任意,尾 (链表为null进不去循环)ListNode<E> del = this.head;while (del != null) {if (del.val.equals(key)) {if (this.head == del) {//如果为头节点if (this.head.next == null) {//如果为头节点,且链表只有一个节点this.head = this.last = null;} else {this.head = this.head.next;this.head.prev = null;}} else {if (this.last == del) {//如果为尾节点this.last = this.last.prev;this.last.next = null;} else {//其他位置del.prev.next = del.next;del.next.prev = del.prev;}}return;}del = del.next;}}@Overridepublic void removeAllKey(E key) {// 头,只一个节点,任意,尾 (链表为null进不去循环)ListNode<E> del = this.head;while (del != null) {if (del.val.equals(key)) {if (this.head == del) {//如果为头节点if (this.head.next == null) {//如果为头节点,且链表只有一个节点this.head = this.last = null;} else {this.head = this.head.next;this.head.prev = null;}} else {if (this.last == del) {//如果为尾节点this.last = this.last.prev;this.last.next = null;} else {del.prev.next = del.next;//其他位置del.next.prev = del.prev;}}}del = del.next;}}@Overridepublic int size() {int count = 0;ListNode<E> cur = this.head;while (cur != null) {count++;cur = cur.next;}return count;}@Overridepublic void display() {ListNode<E> cur = this.head;while (cur != null) {System.out.print(cur.val + " ");cur = cur.next;}System.out.println();}@Overridepublic void clear() {ListNode<E> cur = this.head;while (cur != null) {cur.val = null;cur = cur.next;}this.head = this.last = null;//🙀}
}
相关文章:
![](https://www.ngui.cc/images/no-images.jpg)
【Java】/* 双向链表 - 底层实现 */
【难点】:remove、removeAllKey 一、IList package bagfive;/*** Created with IntelliJ IDEA.* Description:* User: tangyuxiu* Date: 2024-08-21* Time: 20:30*/ public interface IList<E> {//头插法void addFirst(E data);//尾插法void addLast(E data…...
![](https://www.ngui.cc/images/no-images.jpg)
Go 语言协程管理精解
1.基础 协程切换需要操作寄存器,这些操作需要通过汇编辅助实现。另外,每一个协程都有一个协程栈,实际上协程栈也是有结构的。汇编程序和栈结构这些概念可能大部分开发者都不太了解,在介绍协程管理之间,先简要介绍。 1…...
![](https://i-blog.csdnimg.cn/direct/3d077edb53864018947b8e705c6d8556.png)
C库函数signal()信号处理
signal()是ANSI C信号处理函数,原型如下: #include <signal.h>typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sighandler_t handler); signal()将信号signum的处置设置为handler,该handler为SIG_IGNÿ…...
![](https://www.ngui.cc/images/no-images.jpg)
007 SpringCloudAlibaba基础使用(nacos,gateway)
文章目录 cubemall-commoncubemall-productcubemall-gateway https://nacos.io/ https://github.com/alibaba/nacos/releases/tag/1.4.1 https://github.com/alibaba/spring-cloud-alibaba https://github.com/alibaba/Nacos https://developer.aliyun.com/mvn/guide https…...
![](https://www.ngui.cc/images/no-images.jpg)
编译环境揭秘
不同平台因为偏好差异,编译环境的准备会有差异。对于MSVC,微软提供简单的VS安装界面,比较省心。在Ubuntu发行版,gcc/make等程序可能不自带,当需要安装这些软件时就需要不少命令。当然比较麻烦,提供了统一的…...
![](https://i-blog.csdnimg.cn/direct/bb186e96f6634e7893f038b290db009f.png)
不同的字符集(ASCII、UTF-8、UTF-16/UCS-2、UTF-32/UCS-4)
来自:C标准库(第2版)...
![](https://i-blog.csdnimg.cn/direct/fdab9d661f344c12ae6bf11054c53c68.png#pic_center)
STM32f407 网络接收 fpga 的 bin 文件并更新到 fpga series7(3)
STM32f407 网络接收 fpga 的 bin 文件并更新到 fpga series7(3) 简介 实验 3:在搭建好 tcp 服务器,并拟定好协议的前提下,接收每一个 bin 文件的块,配置到 fpga。 原理图 fpga fpga1 stm32 接线总结 // fpga引脚 stm32…...
![](https://www.ngui.cc/images/no-images.jpg)
JavaScript基础知识(七)
数组相关api再续前缘 arr.forEach(function) 对arr数组的每一项执行遍历操作,并且可以通过function来对相关元素进行二次操作 function: 函数,同时接收三个参数 - item: 数组中的每一项 - index: 数组每一项的下标(item的对应下标) - arr: 原数组 arr.map(function) 对数组的…...
![](https://i-blog.csdnimg.cn/direct/c15709aa20bc4f7280b5e3430999a651.png)
20240821让飞凌的OK3588-C的核心板在Linux R4下挂载1TB的exFAT格式的TF卡
fdisk -l df -h df -t df -T mount 20240821让飞凌的OK3588-C的核心板在Linux R4下挂载1TB的exFAT格式的TF卡 2024/8/21 19:47 百度:rk3588 buildroot exFAT mount: mounting /dev/mmcblk1p1 on /mnt failed: Invalid argument Disk /dev/mmcblk1: 955 GB, 10254234…...
![](https://www.ngui.cc/images/no-images.jpg)
Java HashMap练习
JDK1.2添加,线程不安全,性能相对较好 注意:允许使用null作为key或者value 使用数组加链表结构,结合数组和链表的优点 Hash Map的基本使用 package HashMap;import text5.Student;import java.util.Collection; import java.ut…...
![](https://i-blog.csdnimg.cn/direct/c3af8c4534ea4da49a5bfd4e04326846.png)
前后端分离项目实战-通用管理系统搭建(前端Vue3+ElementPlus,后端Springboot+Mysql+Redis)第三篇:登录功能优化
天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…...
![](https://www.ngui.cc/images/no-images.jpg)
8.20 Redis ACL配置 多个用户连接同一个Redis
**一、首先通过 linux命令 redis-cli 输入用户名和密码连接redis的客户端** **二、查看用户,创建用户,设置密码操作** (1)**ACL LIST** 命令 可以查看到当前的权限用户 (2)**ACL SETUSER userName** 此…...
![](https://www.ngui.cc/images/no-images.jpg)
【C语言】static和extern的作用
本文首发于 ❄️慕雪的寒舍 简单介绍C/C中static关键字和extern关键字的作用。 1.简介 在之前的博客中,提到过static的三个作用,但是没有详细说明这三个作用的场景,现在回过头来记录一下。 修饰函数修饰全局变量修饰函数内变量 static还有…...
![](https://i-blog.csdnimg.cn/direct/bcbcb849be804650ad31db0a99071519.webp)
全新分支版本!微软推出Windows 11 Canary Build 27686版
已经很久没有看到 Windows 11 全新的分支版本了,今天微软发布 Windows 11 Canary 新版本,此次版本号已经转移到 Build 27xxx,首发版本为 Build 27686 版。 此次更新带来了多项改进,包括 Windows Sandbox 沙盒功能切换到 Microsof…...
![](https://www.ngui.cc/images/no-images.jpg)
【Linux】ARM服务器命令行安装虚拟机
在Arm服务器上安装虚拟机操作笔记 一、基础环境准备1、环境准备2、检查KVM支持3、启动并启用libvirtd服务4、创建虚拟网络(可选)5、使用virt-manager创建虚拟机(支持KVM)6、管理虚拟机9、监控和日志 二、软虚拟化替代方案1、查看虚…...
![](https://www.ngui.cc/images/no-images.jpg)
Android 10.0 锁屏页面忘记锁屏密码情况下点击5次解锁图标弹出锁屏密码功能实现
1. 前言 在10.0的系统ROM定制化开发中,在一些产品中带锁屏密码的功能中,系统默认是滑动解锁,但是客户会设置锁屏密码,在某些时候会 忘掉锁屏密码,导致需要进入恢复出厂设置然后才能进入系统桌面,这样就导致系统的保存的资料都丢失了,所以需要要求在锁屏密码页面在忘记解…...
![](https://www.ngui.cc/images/no-images.jpg)
Java-CompletableFuture工具类
CompletableFuture 是 Java 8 引入的一个强大的异步编程工具,它提供了对异步计算的高级支 持,包括组合多个任务的能力、处理结果、异常处理等。为了方便地使用 CompletableFuture,你 可以创建一个工具类来封装常用的操作。 CompletableFuture 工具类 下面是一个 Complet…...
![](https://www.ngui.cc/images/no-images.jpg)
C语言:递归
递归简单来说就是函数自己调用自己。 特点:一般代码比较简洁,没有出口。 例子1:用一个函数计算阶乘 #include<stdio.h>//不用递归 int fac(int n) {int val 1;for (int i 1; i <n;i){val * i;}return val; }//用递归 int fac1(…...
![](https://www.ngui.cc/images/no-images.jpg)
自动化测试框架pytest+allure+requests
最近复习了一下关于自动化测试的内容,结合[码尚教育] 相关的思路来对测试框架进行开发。 争取实现零代码来实现自动化测试环境的搭建 AutoTestFrame 介绍 AutoTestFrame是一个基于Python的自动化测试框架,旨在帮助测试人员快速、高效地完成测试任务。…...
![](https://www.ngui.cc/images/no-images.jpg)
Python 笔记 numpy.ndarray切片
NumPy 的 ndarray 类型提供了非常灵活的切片功能,可以方便地访问和操作数组中的元素。切片允许您通过指定索引来选择数组的一部分。下面是一些基本的切片操作及其解释。 一维数组的切片 对于一维数组,切片操作类似于 Python 列表的切片。 示例 impor…...
![](https://www.ngui.cc/images/no-images.jpg)
一、HTML5知识点精讲
一、HTML5介绍 html是用来描述网页的一种语言(就是写网页的一种语言)。 它和CSS,JS称为网页三要素。 HTML负责把元素简单呈现在网页上,是网页的身体CSS负责给网页元素添加各种样式,是网页的衣服JS负责实现各种动态、…...
![](https://img-blog.csdnimg.cn/img_convert/257eb6529f55db7f3c9e2d8e530dd8a2.png)
【杂乱算法】前缀和与差分
前缀和 文章目录 前缀和一维应用 二维差分一维 二维扩展1、前缀和与哈希表 一维 一个数组prefix中,第i个元素表示nums[0]至nums[i-1]的总和,那么我们就称这个prefix数组是nums数组的前缀和。 prefix [ i ] ∑ j 0 i nums [ j ] \text{prefix}[i] \s…...
![](https://i-blog.csdnimg.cn/direct/3432af2afeaa492bb65f485d08d5b6d2.png)
Arduino调试ESP32常见问题 exit status 1
问题1:代码上传(烧录)报Failed uploading: uploading error: exit status 1大概率原因:没有安装对应的驱动,我的ESP32驱动是CH340点击这里下载CH340 下载后打开,若出现乱码不用在意,点击第一个按…...
![](https://img-blog.csdnimg.cn/direct/cd137335378c45e4a7300d4c8953cf95.png)
“决胜面试:高频题目与算法策略一览”
干货分享,感谢您的阅读! (暂存篇---后续会删除,完整版和持续更新见高频面试题基本总结回顾(含笔试高频算法整理)) 备注:引用请标注出处,同时存在的问题请在相关博客留言…...
![](https://i-blog.csdnimg.cn/direct/db37c29c87cc4b59afc1254677c4f3f1.png)
Node-RED的安装
最近对Node-RED比较感兴趣,因为在上OpenHarmony课程的时候,一直想找一个可以通过MQTT控制设备的低代码客户端解决方案。第一次指导Node-RED是在试用聆思开发板的时候,它的云端就是使用的Node-RED。 在安装Node-RED之前,请确保您的…...
![](https://www.ngui.cc/images/no-images.jpg)
java中的Collections
Java 的集合框架(Collections Framework)提供了一组标准的数据结构接口和类,用于存储和操作数据。Java 集合类位于 java.util 包中,主要包括以下几个核心接口和实现类。 1. 核心接口 1.1. Collection 接口 Collection 是集合框架的根接口,但它本身并不提供任何直接实现…...
![](https://i-blog.csdnimg.cn/direct/88cb94c7c9f9427999dca0b962c1bcdd.png)
linux Qt QkeyEvent及驱动键盘按键捕获
基于正点原子 QT中有专门的类处理键盘事件的类QKeyEvent 1.include “QKeyEvent” 查看它的说明中的描述 也就是说接受按键事件在keyPressEvent和keyReleaseEvent这两个函数,继续查看 重构这个函数 查看输入的QKeyEvent类,发现有一个方法key返回哪一个按…...
![](https://img-blog.csdnimg.cn/img_convert/7590e9c62b618a9064a505205126fa41.png)
【GH】【EXCEL】P6: Shapes
文章目录 componentslinepicture components line picture Picture A Picture object Input parameters: Worksheet (Generic Data) A Worksheet, Workbook, Range Object, Excel Application, or Text Worksheet NameName (Text) An optional object nameLocation (Point) A p…...
![](https://i-blog.csdnimg.cn/direct/f52ae7c3399f4e1f9e3764bb406e923c.png)
google浏览器chrome用户数据(拓展程序,书签等)丢失问题
一、问题背景 我出现这个情况的问题背景是:因为C盘块满了想清理一部分空间(具体看这:windows -- C盘清理_c盘softwaredistribution-CSDN博客),于是找到了更改AppDatta这个方法,但因为,当时做迁移…...
![](https://i-blog.csdnimg.cn/direct/897d547d680c414e93a6002df68b12d0.png)
数据结构——链式队列和循环队列
目录 引言 队列的定义 队列的分类 1.单链表实现 2.数组实现 队列的功能 队列的声明 1.链式队列 2.循环队列 队列的功能实现 1.队列初始化 (1)链式队列 (2)循环队列 (3)复杂度分析 2.判断队列是否为空 (1)链式队列 (2)循环队列 (3)复杂度分析 3.判断队列是否…...
![](/images/no-images.jpg)
做通路富集分析的网站/cba最新消息
问题描述:客户端连接数据库报错,ORA-12516: TNS: 监听程序无法找到匹配协议栈的可用句柄 解决过程:1。查看当前会话数、processes和sessions值,发现session数和2个参数的值已经非常逼近SQL*Plus: Release 10.2.0.1.0 - Production on 星期一 …...
![](/images/no-images.jpg)
改变网站字体/百度空间登录
Lucene的概述: Lucene(发音为 [lusen] )是一个非常优秀的开源的全文搜索引擎,我们可以在它的上面开发出各种全文搜索的应用来。Lucene在国外有很高的知名度,现在已经是Apache的顶级项目,在国内,Lucene的应用也越来越多。 Lucene的…...
![](https://img2018.cnblogs.com/blog/1573074/201901/1573074-20190118160224662-545431820.gif)
顺德装修网站建设/百度推广区域代理
已将完整示例放置在github上 地址:https://github.com/LyyZzzz/img-slide.git如有转载望附带本网页链接 /*** created by Lee on 2019/1/18 12:07* slide 调用方法 基于jq *为必传* param box 图片盒子 ** param eachbox 每个图片最高父级 ** param time 轮播间隔…...
![](http://s5.51cto.com/wyfs02/M00/24/7D/wKioL1NQiXiCWUmQAACln1uoInM835.jpg)
小企业网站建设怎样可以快速/广州竞价托管
随着不同终端(Pad/Mobile/PC)的兴起,对开发人员的要求越来越高,纯浏览器端的响应式已经不能满足用户体验的高要求,我们往往需要针对不同的终端开发定制的版本。为了提升开发效率,前后端分离的需求越来越被重视,后端负责…...
![](/images/no-images.jpg)
张家港外贸网站制作/企业建站平台
HTTP cookies,通常又称作"cookies",已经存在了很长时间,但是仍旧没有被予以充分的理解。首要的问题是存在了诸多误区,认为cookies是后门程序或病毒,或压根不知道它是如何工作的。第二个问题是对于cookies缺少…...
![](/images/no-images.jpg)
找人做网赌网站需要多少钱/seowhy培训
先简单看一下主过程: int MAXFLOW() {hights();prepare();while (!Q.empty()) {u Q.get;for each e in G (from u) push(e);if (!fixed(u)) reCalc(u);} }接下来介绍算法 预流推进算法给每一个顶点一个标号h(v),表示该点到t的最短路(在残量…...