java代码:单链表的实现

1、代码

package LinkList;public class Linklist {//定义节点,内部类只为其外部类使用//要创建嵌套类的对象,并不需要其外围类的对象,直接使用.nextstatic class ListNode{int val;//数据域ListNode next;//指针,指向下一个结点的位置(java里面是引用数据类型——地址)public ListNode(int val){this.val = val;}}//队首指针和队尾指针ListNode head;ListNode tail;int size;//链表长度//定义链表(初始化链表)public Linklist(){head = null;tail = null;size = 0;}public static void main(String[] args) {//初始化链表Linklist newList = new Linklist();newList.appendIntail(5);newList.appendIntail(7);newList.appendIntail(4);newList.appendIntail(2);newList.printList();newList.appendInHead(30);newList.appendInHead(27);newList.insert(3,9);newList.printList();newList.deleteNode(9);newList.printList();newList.findInNumber(4);newList.findInNumber(1);newList.findInIndex(9);newList.update(11,2);newList.printList();}//增加新元素至表尾public void appendIntail(int number){//创建一个值为number的结点ListNode newNode = new ListNode(number);//链表为空时,申请的结点就是第一个结点也是表尾结点if(tail == null){tail = newNode;head =newNode;}else {//链表不空直接加入表尾tail.next = newNode;tail = newNode;}size++;System.out.println("值为" + number +"的结点成功加入链表!");}//头插法建立单链表public void appendInHead(int number){ListNode newNode = new ListNode(number);if(tail == null){//初试链表为空head = newNode;tail = newNode;System.out.println("头插法成功!");}else {//链表不空,放在首节点之前newNode.next = head;head = newNode;System.out.println("头插法成功!");}}//在position插入值为number的结点public void insert(int position,int number){if(position >size){//插入位置不合法return;}ListNode newNode = new ListNode(number);if(position == 0){//在首节点之前插入newNode.next=head;head = newNode;if(tail == null){//说明新结点是该链表第一个插入的结点tail = newNode;}size++;System.out.println("插入成功!");} else if (position == size){//插入位置在最后一个的后一个,直接加载末尾this.appendIntail(number);System.out.println("插入成功!");}else {//找到要插入位置的前一个位置//从头结点开始遍历,直到找到position-1的位置ListNode pre = head;for(int i = 0;i < position-1;i++){pre = pre.next;}//插入newNode.next=pre.next;pre.next = newNode;size++;System.out.println("插入成功!");}}//打印链表public void printList(){System.out.print("链表:[");ListNode cur = head;while (cur != null){if(cur.next == null){System.out.println(cur.val +"]");cur = cur.next;return;}System.out.print(cur.val + ",");cur = cur.next;}System.out.println(" ");}//按值删除public void deleteNode(int number){//第一个节点是要删除的结点的情况下,直接删除if(head !=null && head.val == number){head = head.next;size--;if(size == 0){//表为空的情况下tail = head;}System.out.println("删除成功,成功删除值为" + number + "的结点");}else {//否则就遍历链表找到值为number的结点的前一个结点ListNode pre = head;ListNode cur = head;//遍历while (cur != null){if(cur.val == number){//要删除的结点是表尾结点,修改tailif (cur == tail){pre.next = null;tail = pre;size--;System.out.println("删除成功,成功删除值为" + number + "的结点");return;}else {//删除的不是表尾结点,正常删除pre.next = cur.next;size--;System.out.println("删除成功,成功删除值为" + number + "的结点");return;}}else {//不是要删除的结点,继续向后滑动遍历pre = cur;cur = cur.next;}}//while结束后还没成功删除,说明没有值为number的结点System.out.println("删除失败,没有该结点");return;}}//按值查找public void findInNumber(int number){ListNode p = head;while (p != null){if(p.val == number){System.out.println("查找成功!");return;}else {p = p.next;}}System.out.println("不存在该数,查找失败!");return;}//按位查找public void findInIndex(int index){if(index > size){System.out.println("查找失败,位置非法!");}else {ListNode cur = head;int i = 0;while (i < index){cur = cur.next;i++;}System.out.println("查找成功,查找到的数值为:" + cur.val);}}//更新值为oldvalue的结点为newValue,并返回更新结点的位置public int update(int oldValue,int newValue){int i = 1;ListNode cur = head;while (cur != null){if(cur.val == oldValue){cur.val = newValue;System.out.println("更新成功!");return i;}else {i++;cur = cur.next;}}System.out.println("更新失败!不存在值为" + oldValue + "的结点");return -1;}}

2、结果

在这里插入图片描述

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

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

相关文章

GPT-4从0到1搭建一个Agent简介

GPT-4从0到1搭建一个Agent简介 1. 引言 在人工智能领域&#xff0c;Agent是一种能够感知环境并采取行动以实现特定目标的系统。本文将简单介绍如何基于GPT-4搭建一个Agent。 2. Agent的基本原理 Agent的核心是感知-行动循环&#xff08;Perception-Action Loop&#xff09;…

C#与倍福Plc通信——使用仿真软件模拟倍福PLC运行

前言 我们在编写上位机与倍福PLC通信的过程中,有时候我们没有真实的Plc,但是我们又想提前测试与倍福PLC的通信,那么这个时候我们就可以使用倍福的仿真软件模拟PLC,然后我们上位机就可以与仿真PLC进行通信了,下面进行详细介绍: 1、下载并安装倍福PLC编程软件TwinCAT 安…

Android TabLayout+ViewPager2如何优雅的实现联动详解

一、介绍 Android开发过程中&#xff0c;我们经常会遇到滑动导航栏的做法&#xff0c;之前的做法就是我们通过ViewGroup来转动&#xff0c;然后通过大量的自定义来完成&#xff0c;将导航栏item与viewpage 滑动&#xff0c;达到业务需求 二、现实方案 通过介绍&#xff0c;我…

机器人前沿--PalmE:An Embodied Multimodal Language Model 具身多模态大(语言)模型

首先解释这篇工作名称Palm-E&#xff0c;发表时间为2023.03&#xff0c;其中的Palm是谷歌内部在2022.04开发的大语言模型&#xff0c;功能类似ChatGPT&#xff0c;只是由于各种原因没有那样火起来&#xff0c;E是Embodied的首字母&#xff0c;翻译过来就是具身多模态大语言模型…

宠物浮毛克星!最值得买的猫用空气净化器排名

作为用了3年宠物空气净化器的铲屎官来说&#xff0c;为什么铲屎官每到春秋换季就开始疯狂打喷嚏、突然开始全身过敏。其原因是猫毛一到换季就开始疯狂掉毛&#xff0c;相对于可见猫毛&#xff0c;漂浮在空气中的浮毛就是罪灰祸首。微小的浮毛在空气总容易被人体吸入体内&#x…

Qt+ESP32+SQLite 智能大棚

环境简介 硬件环境 ESP32、光照传感器、温湿度传感器、继电器、蜂鸣器 基本工作流程 上位机先运行&#xff0c;下位机启动后尝试连接上位机连接成功后定时上报传感器数据到上位机&#xff0c;上位机将信息进行处理展示判断下位机传感器数据&#xff0c;如果超过设置的阈值&a…

[misc]-流量包-wireshark-icmp

wireshark打开&#xff0c;大部分都是icmp,查看data部分 提取data长度&#xff1a; tshark.exe -r 1.pcapng -T fields -e data.len > length.txt 使用python解析这个文件&#xff0c;剔除异常值&#xff0c;每8个取一个值&#xff0c;得到flag ds [] with open(length.tx…

188家国产大模型:挑战与机遇,未来杀手级AI应用究竟该长什么样子?

未来的杀手级AI应用究竟该长什么样子&#xff1f;这篇文章里&#xff0c;作者梳理了国内外LLMs基础大模型的特征&#xff0c;并于最后发表了自己关于杀手级AI应用的看法和见解&#xff0c;一起来看一下。 摘要&#xff1a; 本文详细列表展示国外18家&#xff0c;国内188家大模…

ReentrantLock的源码实现和原理介绍

目录 一、概述 二、ReentrantLock的整体结构 三、ReentrantLock 和Synchronized相比 四、ReentrantLock 公平锁和非公平锁实现 4.1 ReentrantLock 源码解读 4.1.1 ReentrantLock 类源码解读 4.1.1.1 Lock接口 4.1.1.2 Sync抽象类 4.1.1.3 NonfairSync()和FairSync() 4…

EasyCVR视频技术:城市电力抢险的“千里眼”,助力抢险可视化

随着城市化进程的加速和电力需求的不断增长&#xff0c;电力系统的稳定运行对于城市的正常运转至关重要。然而&#xff0c;自然灾害、设备故障等因素常常导致电力中断&#xff0c;给城市居民的生活和企业的生产带来严重影响。在这种情况下&#xff0c;快速、高效的电力抢险工作…

产品介绍|九芯语音芯片的特点与应用市场

随着物联网与智能家居的普及&#xff0c;越来越多的电子产品有了语音播报的需求。九芯语音芯片集成了语音识别和语音合成技术&#xff0c;能够准确地捕捉并解析人类的语言&#xff0c;同时以清晰、自然的语调进行回应&#xff0c;为各类智能设备注入了强大的语言交互能力。 特点…

OSI 七层模型与五层模型

OSI&#xff08;开放系统互连&#xff09;七层模型和五层模型是描述计算机网络协议的两种不同层次划分方法。两者用于帮助理解和设计网络协议&#xff0c;但它们在层次划分上有所不同。

使用Elasticsearch Python SDK 查询Easysearch

随着数据分析需求的不断增长&#xff0c;能够高效地查询和分析大数据集变得越来越重要。Elasticsearch作为一种强大的分布式搜索和分析引擎&#xff0c;被广泛应用于各种场景。Easyearch 支持原生 Elasticsearch 的 DSL 查询语法&#xff0c;确保原业务代码无需调整即可无缝迁移…

优化校园设施维护,故障类型功能全解析

在智慧校园的日常运作中&#xff0c;报修管理系统的故障类型功能扮演着至关重要的角色。它不仅简化了设备维修的流程&#xff0c;还极大地提升了校园设施的维护效率。该功能的核心在于&#xff0c;它允许系统管理员创建、编辑和删除一系列故障类型&#xff0c;涵盖从网络连接问…

vue实现动态图片(gif)

目录 1. 背景 2. 分析 3. 代码实现 1. 背景 最近在项目中发现一个有意思的小需求&#xff0c;鼠标移入一个盒子里&#xff0c;然后盒子里的图就开始动起来&#xff0c;就像一个gif一样&#xff0c;然后鼠标移出&#xff0c;再按照原来的变化变回去&#xff0c;就像变形金刚…

QT--控件篇二

一、文本框 1. QLineEdit 文本框通常使用QLineEdit和QTextEdit这两个类来实现。 QLineEdit&#xff1a;用于单行文本输入。QTextEdit&#xff1a;用于多行文本输入&#xff0c;可以包含丰富的文本格式。 用setText(QString txt);设置默认的显示内容&#xff0c;用QString tex…

【NOI】C++数据结构入门之一维数组(一)数组基础

文章目录 前言一、概念1.导入2.数组2.1 数组的创建2.2 数组的使用 二、例题讲解问题&#xff1a;1423 - 考试成绩的简单统计问题&#xff1a;1153 - 查找“支撑数”问题&#xff1a;1156 - 排除异形基因问题&#xff1a;1155 - 找找谁的身高超过全家的平均身高问题&#xff1a;…

计算机网络生成树协议介绍与实践

生成树协议 1.环路 二层环路&#xff1a;数据链路层&#xff0c;交换机&#xff08;二层设备&#xff09;通过线路连接环状。即物理成环并且没有开启防环协议。 危害&#xff1a;广播风暴&#xff1a;交换机将未知帧广播&#xff0c;收到后的交换机继续广播&#xff0c;不断…

全国地级市-产业升级、高级化、合理化数据集(1999-2022年)

数据年份&#xff1a;1999-2022年 数据范围&#xff1a;地级市以上城市 数据来源&#xff1a;中国城市统计NJ 数据整理&#xff1a;内含原始版本、线性插值版本、ARIMA填补版本 数据说明&#xff1a;参考干春晖&#xff08;2011&#xff09;《经济研究》的文章 &#xff0c…

数据结构(单链表(1))

前言 线性表中有着许多的结构&#xff0c;如顺序表和链表。而单链表则是链表的最基础的一种形式&#xff0c;下面就让我们对其做一个了解。 概念 概念&#xff1a;链表是⼀种物理存储结构上⾮连续、⾮顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次…