【Java】LinkedList模拟实现

目录

  • 整体框架
  • IMyLinkedList接口
  • IndexNotLegalException异常类
  • MyLinkedList类
    • 成员变量(节点信息)
    • addFirst(头插)
    • addLast(尾插)
    • 在指定位置插入数据
    • 判断是否存在
    • 移除第一个相等的节点
    • 移除所有相等的节点
    • 链表的长度
    • 打印链表
    • 释放回收链表

整体框架

在这里插入图片描述

IMyLinkedList接口

这个接口用来存放所有方法,之后用MyLinkedList来实现这个接口,重写里面的方法

public interface IMyLinkedList {//头插法public void addFirst(int data);//尾插法public void addLast(int data);//任意位置插入,第一个数据节点为0号下标public void addIndex(int index,int data);//查找是否包含关键字key是否在单链表当中public boolean contains(int key);//删除第一次出现关键字为key的节点public void remove(int key);//删除所有值为key的节点public void removeAllKey(int key);//得到链表的长度public int size();//打印链表public void display();//释放链表public void clear();
}

IndexNotLegalException异常类

IndexNotLegalExceprion异常类用来判断index是否合法

public class IndexNotLegalException extends RuntimeException{public IndexNotLegalException() {}public IndexNotLegalException(String msg) {super(msg);}
}

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;

addFirst(头插)

public void addFirst(int data) {ListNode newNode = new ListNode(data);if(head == null){head = last = newNode;}else{newNode.next = head;head.prev = newNode;head = newNode;}}

addLast(尾插)

public void addLast(int data) {ListNode newNode = new ListNode(data);if(head == null){head = last = newNode;}else{newNode.prev = last;last.next = newNode;last = newNode;}}

在指定位置插入数据

public void addIndex(int index, int data) {//判断index的合法性try{checkIndex(index);}catch(IndexNotLegalException e){e.printStackTrace();}if(index == 0){addFirst(data);return;}if(index == size()){addLast(data);return;}ListNode newNode = new ListNode(data);ListNode cur = head;while(index != 0){cur = cur.next;index--;}newNode.next = cur;newNode.prev = cur.prev;cur.prev.next = newNode;cur.prev = newNode;}private void checkIndex(int index){if(index<0 || index>size()){throw new IndexNotLegalException("Index不合法...");}}

判断是否存在

public boolean contains(int key) {ListNode cur = head;while(cur != null){if(cur.val == key){return true;}cur = cur.next;}return false;}

移除第一个相等的节点

public void remove(int key) {ListNode cur = head;if(head.val == key && head == last){head = last = null;return;}//如果删除的在head节点if(head.val == key){head = head.next;head.prev = null;return;}while(cur != null){if(cur.val == key){cur.prev.next = cur.next;if(cur.next == null){last = cur.prev;break;}cur.next.prev = cur.prev;}cur = cur.next;}}

移除所有相等的节点

public void removeAllKey(int key) {ListNode cur = head;if(head.val == key && head == last){head = last = null;return;}//如果删除的在head节点if(head.val == key){head = head.next;head.prev = null;}while(cur != null){if(cur.val == key){cur.prev.next = cur.next;if(cur.next == null){last = cur.prev;break;}cur.next.prev = cur.prev;}cur = cur.next;}}

链表的长度

 public int size() {int count = 0;ListNode cur = head;while (cur != null) {count++;cur = cur.next;}return count;}

打印链表

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

释放回收链表

public void clear() {ListNode cur = head;while(cur != null){ListNode curN = cur.next;cur.prev = null;cur.next = null;cur = curN;}}

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

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

相关文章

京东云服务器价格_云主机价格查询系统_2024年京东云优惠活动

2024年京东云服务器优惠价格表&#xff0c;轻量云主机优惠价格5.8元1个月、轻量云主机2C2G3M价格50元一年、196元三年&#xff0c;2C4G5M轻量云主机165元一年&#xff0c;4核8G5M云主机880元一年&#xff0c;游戏联机服务器4C16G配置26元1个月、4C32G价格65元1个月、8核32G费用…

OpenHarmony如何模拟搭建本地http静态服务

简介 本文是在基于OpenHarmony 4.0的基础上&#xff0c;介绍了一种编写一个前端http静态服务的思路. 方案设计 在OpenHarmony上&#xff0c;如果想要访问本地网页。有两种方案 u 方案一&#xff1a;使用file协议&#xff0c;将html放至entry/src/main/resource/rawfile下&#…

构建ELK+Filebeat+kafka+zookeeper大数据日志分析平台

主机IP 角色 所属服务层 部署服务 192.168.11.11 日志生产 采集层 filebeat 192.168.11.12 日志缓存 数据处理层、缓存层 Zookeeperkafkalogstash 192.168.11.13 192.168.11.14 日志展示 持久、检索、展示层 Logstashelasticsearchkibana 数据流向 filebeat--…

华清远见STM32U5开发板助力2024嵌入式大赛ST赛道智能可穿戴设备及IOT选题项目开发

第七届&#xff08;2024&#xff09;全国大学生嵌入式芯片与系统设计竞赛&#xff08;以下简称“大赛”&#xff09;已经拉开帷幕&#xff0c;大赛的报名热潮正席卷而来&#xff0c;高校电子电气类相关专业&#xff08;电子、信息、计算机、自动化、电气、仪科等&#xff09;全…

新能源充电桩站场AI视频智能分析烟火检测方案及技术特点分析

新能源汽车充电起火的原因多种多样&#xff0c;涉及技术、设备、操作等多个方面。从技术层面来看&#xff0c;新能源汽车的电池管理系统可能存在缺陷&#xff0c;导致电池在充电过程中出现过热、短路等问题&#xff0c;从而引发火灾。在设备方面&#xff0c;充电桩的设计和生产…

Linux部署Kafka2.8.1

安装Jdk 首先确保你的机器上安装了Jdk&#xff0c;Kafka需要Java运行环境&#xff0c;低版本的Kafka还需要Zookeeper&#xff0c;我此次要安装的Kafka版本为2.8.1&#xff0c;已经内置了一个Zookeeper环境&#xff0c;所以我们可以不部署Zookeeper直接使用。 1、解压Jdk包 t…

接口自动化框架搭建(八):pytest+allure+jenkins接入

1&#xff0c;安装allure插件 2&#xff0c;创建jenkins项目 怎么确定路径&#xff0c;可以查看工作空间&#xff0c;jenkins默认根目录就是工作空间 配置执行用例的命令&#xff0c;可以现在pycharm上试一下&#xff0c;然后在jenkins中配置&#xff1a; 把启动java服务的代…

每天五分钟深度学习:使用神经网络完成人脸的特征点检测

本文重点 我们上一节课程中学习了如何利用神经网络对图片中的对象进行定位,也就是通过输出四个参数值bx、by、bℎ和bw给出图片中对象的边界框。 本节课程我们学习特征点的检测,神经网络可以通过输出图片中对象的特征点的(x,y)坐标来实现对目标特征的识别,我们看几个例子。…

162.乐理基础-和声大调、旋律大调

内容参考于&#xff1a; 三分钟音乐社 上一个内容&#xff1a;161.音程、和弦板块总结、重点、建议 首先需要回忆一下18.调式、自然大调式&#xff08;C大调、D大调。。。&#xff09;与19.音阶是什么、有什么用&#xff0c;在18.调式、自然大调式&#xff08;C大调、D大调。…

【php程序开发从入门到精通】——搭建PHP开发环境

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

联通iccid 19转20 使用luhn 算法的计算公式

联通iccid 19转20 使用luhn 算法的计算公式 第一次对接iccid 才知道 使用的是luhn 算法 19转20位 文章来源于 文章来源 当时也是一脸懵逼 的状态&#xff0c;然后各种chatgpt 寻找&#xff0c;怎么找都发现不对&#xff0c;最后看到这片java的文章实验是正确的&#xff0c;因…

服务器被CC攻击之后怎么办?

1.取消域名绑定取消域名绑定后Web服务器的CPU能够马上恢复正常状态&#xff0c;通过IP进行访问连接一切正常。但是不足之处也很明显&#xff0c;取消或者更改域名对于别人的访问带来了不变&#xff0c;另外&#xff0c;对于针对IP的CC攻击它是无效的&#xff0c;就算更换域名攻…

绘制特征曲线-ROC(Machine Learning 研习十七)

接收者操作特征曲线&#xff08;ROC&#xff09;是二元分类器的另一个常用工具。它与精确度/召回率曲线非常相似&#xff0c;但 ROC 曲线不是绘制精确度与召回率的关系曲线&#xff0c;而是绘制真阳性率&#xff08;召回率的另一个名称&#xff09;与假阳性率&#xff08;FPR&a…

2013年认证杯SPSSPRO杯数学建模A题(第一阶段)护岸框架全过程文档及程序

2013年认证杯SPSSPRO杯数学建模 A题 护岸框架 原题再现&#xff1a; 在江河中&#xff0c;堤岸、江心洲的迎水区域被水流长期冲刷侵蚀。在河道整治工程中&#xff0c;需要在受侵蚀严重的部位设置一些人工设施&#xff0c;以减弱水流的冲刷&#xff0c;促进该处泥沙的淤积&…

钉钉 AI 升级多种功能;智谱AI PC智能助手发布;百度回应与苹果合作

▶ 钉钉 AI 升级上线多种功能 3 月 28 日&#xff0c;钉钉 AI 助理升级。升级后上线了图片理解、文档速读、工作流等产品能力&#xff0c;率先探索多模态、长文本与 RPA 技术在 AI 应用的落地。 基于阿里通义千问大模型&#xff0c;升级后的钉钉 AI 助理可以做到&#xff1a; …

三极管工作方式

如下图&#xff1a; 谨记&#xff1a; NPN 型&#xff1a; B 0 截止 B 1 导通 PNP 型&#xff1a; B 0 导通 B 1 截止 来源&#xff1a;% - 闲鹤

Java项目实战笔记--基于SpringBoot3.0开发仿12306高并发售票系统--(二)项目实现-第五篇-核心功能车票预定开发及nacos集成

本文参考自 Springboot3微服务实战12306高性能售票系统 - 慕课网 (imooc.com) 本文是仿12306项目实战第&#xff08;二&#xff09;章——项目实现 的第五篇&#xff0c;本篇讲解该项目的核心功能——余票查询、车票预定功能的基础版开发&#xff0c;以及讲解项目与Nacos的集成…

【Canvas与艺术】双“方齿齿轮”啮合示意图

【关键点】 齿轮数组的建立、旋转角度的调整。 【图例】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>双“方齿齿轮”啮合…

WIFI驱动移植实验:连接WIFI热点

一. 简介 前一篇文章做了WIFI联网前的工作&#xff0c;文章如下&#xff1a; WIFI驱动移植实验&#xff1a;WIFI 联网前的工作-CSDN博客 本文在上面一篇文章工作实现的基础上&#xff0c;实现 WIFI的连接。 二. WIFI驱动移植实验&#xff1a;WIFI 联网测试 这里WIFI联网的…

什么是量子计算?

什么是量子计算&#xff1f; 量子计算机仍处于起步阶段&#xff0c;正在影响已经在经典计算机上运行的新一代模拟&#xff0c;现在使用 NVIDIA cuQuantum SDK 进行加速。 在史蒂夫乔布斯 (Steve Jobs) 推出可以放入口袋的计算机之前 27 年&#xff0c;物理学家保罗贝尼奥夫 (P…