java单链表的增删改查

链表的介绍及用java实现带头节点单链表的增删改查 一、链表的介绍 1、链表是以节点的方式来储存,是链式储存。 2、每个节点包含data域(存放数据)、next域(指向下一个节点)。 3、链表的各个节点不一定是连续储存的。 4、链表分为带头节点的链表和没有头节点的链表,根据实际的需求来确定。 二、带头节点单链表示意图 三、编写java代码实现带头节点的单链表 3.1 应用实例 使用带头的单向链表实现 – 水浒英雄排行榜管理完成对英雄人物的增删改查... 阅读详情

说在前面:过年这几天想学习却静不下心,一个单链表看了5天,,,咳咳,好了,现在来总结下但单链表的一些简单的东西

1.什么是链表

链表是有序的列表,但是他在内存中的存储和列表并不一样,如图

在这里插入图片描述

链表是以节点的方式来存储数据的,是链式存储,他的每个节点分为两部分,data域和next指针域,data域是用来保存该节点的数据,next域用来指向下一个节点,所以链表中的各个节点并不一定是连续存储的。

逻辑示意图如下

在这里插入图片描述

2.如何创建一个单链表

为了更形象的说明,我们来创建一个水浒英雄的单链表,并构造一个水浒英雄的单链表的构造器

package linkedlist;

public class nodehero {
    public int no;
    public String name;
    public String nickname;
    public nodehero next;
    
   
    //构造器
    
    public nodehero(int no,String name,String nickname) {
    	this.no=no;//英雄编号
    	this.name=name;//英雄名字
    	this.nickname=nickname;//英雄昵称
    }
    
    
    //为了显示方法,我们重写tostring方法

	@Override
	public String toString() {
		return "nodehero [no=" + no + ", name=" + name + ", nickname=" + nickname +"]";
	}
    
}

接下来我们开始构造单链表

package linkedlist;

public class singlelinkedlist {
    
    //初始化头节点
	private nodehero head=new nodehero(0,"","");
}

	//显示链表
	public void list() {
		if(head.next==null) {
			System.out.println("链表为空");
			return;
		}
		
		nodehero temp=head.next;
		while(true) {
			if(temp==null) {
				break;
			}
			System.out.println(temp);
			temp=temp.next;
		}
	}
	

3.单链表的应用(增删改查)

3.1添加节点

现在的链表里我们只有一个head头节点,当我们要往里面添加节点实际上就是将链表的尾节点next域指向我们所要添加的节点,但是头节点我们显然不能动,所以我们需要一个辅助变量temp来帮我们完成

	public void add(nodehero nodehero) {
		//head节点不能动,所以我们需要一个辅助变量temp
		nodehero temp=head;
		//遍历链表
		while(true) {
			//找到链表的最后
			if(temp.next==null) {
				break;
			}
			
			temp=temp.next;
			
			
		}
		temp.next=nodehero;
	}

此时问题来了,这样的添加方法并不是按顺序添加,或者说即使是要添加相同的英雄也是没问题的,但是这显然不符合实际,所以我们需要一个能按顺序插入链表并且查重的方法

public void addByorder(nodehero nodehero) {
		nodehero temp=head;
		boolean flag=false;//判断是否存在相同编号的标志
		while(true) {
			if(temp.next==null) {
				break;
			}else if(temp.no==nodehero.no) {//当添加的节点的英雄编号和链表里节点的英雄编号一致时
				flag=true;
			}else if(temp.next.no>nodehero.no) {//当你所插入的英雄编号大于当前遍历的节点并且小于下一个节点的英雄编号时
				break;
			}
			temp=temp.next;
		}
		if(flag) {
			System.out.println("编号已存在");
		}else {
			nodehero.next=temp.next;//插入
			temp.next=nodehero;
		}
	}
	

测试代码

package linkedlist;

public class singlelinkedlistdemo {   
    public static void main(String[] args) {
		singlelinkedlist s=new singlelinkedlist();
		nodehero hero1=new nodehero(1,"宋江","及时雨"); 
		nodehero hero2=new nodehero(2,"卢俊义","玉麒麟"); 
		nodehero hero3=new nodehero(3,"吴用","智多星"); 
		s.add(hero1);
		s.add(hero2);
		s.add(hero3);
		s.list();
		}
}

在这里插入图片描述

3.2修改节点

修改节点时我们的依据依旧是英雄编号,思路就是根据你要修改的英雄编号去链表里遍历,当找到一样的编号的时候就将修改的信息添加进去

	public void change(nodehero nodehero) {
		boolean flag=false;
		nodehero temp=head;
		while(true) {
			if(temp.next==null) {
				break;
			}
			
			if(temp.no==nodehero.no) {
				flag=true;
				break;
			}
			temp=temp.next;
		}
		if(flag) {
			temp.no=nodehero.no;
			temp.name=nodehero.name;
			temp.nickname=nodehero.nickname;
		}else {
			System.out.println("没有此英雄");
		}
		
	}

测试代码

package linkedlist;

public class singlelinkedlistdemo {   
    public static void main(String[] args) {
		singlelinkedlist s=new singlelinkedlist();
		nodehero hero1=new nodehero(1,"宋江","及时雨"); 
		nodehero hero2=new nodehero(2,"卢俊义","玉麒麟"); 
		nodehero hero3=new nodehero(3,"吴用","智多星"); 
		s.add(hero1);
		s.add(hero2);
		s.add(hero3);
		s.list();
		nodehero hero4=new nodehero(2,"卢卢","鸹貔"); 
		s.change(hero4);
		System.out.println("-----");
		s.list();
		}
}

在这里插入图片描述

3.3删除节点

删除节点的思路并不是直接把节点删掉,而是将要删的节点根据其英雄编号在链表中遍历,并且我们必须找到相同编号的前一个,也就是说temp.next是我们要删的节点,当找到之后我们只需将temp.next=temp.next.next即可

public void del(nodehero nodehero) {
		nodehero temp=head;
		boolean flag=false;
		while(true) {
			if(temp.next==null) {
				break;
			}
			
			if(temp.next.no==nodehero.no) {
				flag=true;
				break;
			}
			temp=temp.next;
		}
		
		if(flag) {
			temp.next=temp.next.next;
		}else {
			System.out.println("没有找到此节点,无法删除");
		}
	}

测试代码

package linkedlist;

public class singlelinkedlistdemo {   
    public static void main(String[] args) {
		singlelinkedlist s=new singlelinkedlist();
		nodehero hero1=new nodehero(1,"宋江","及时雨"); 
		nodehero hero2=new nodehero(2,"卢俊义","玉麒麟"); 
		nodehero hero3=new nodehero(3,"吴用","智多星"); 
		s.add(hero1);
		s.add(hero2);
		s.add(hero3);
		s.list();
		nodehero hero4=new nodehero(2,"卢卢","鸹貔"); 
		s.change(hero4);
		System.out.println("-----");
		s.list();
		System.out.println("----");
		s.del(hero4);
		s.list();
	}

}

在这里插入图片描述

3.4查询

查询思路其实很简单就是拿着编号去遍历,我就不多说了,直接上代码

	public void query(int num) {
		nodehero temp=head;
		boolean flag=false;
		while(true) {
			if(temp.no==num) {
				flag=true;
				break;
			}
			if(temp.next==null) {
				break;
			}
			
			temp=temp.next;
		}
		
		if(flag) {
			System.out.println("你所查询的英雄编号是"+temp.no+",英雄名称是"+temp.name+",英雄昵称是"+temp.nickname);
		}else {
			System.out.println("没有此英雄");
		}
	}

测试代码

s.query(3);

在这里插入图片描述

VSCode + Copilot下:配置并使用 DeepSeek 以下是关于在中,通过插件配置并使用系列模型 () 的完整汇总指南。 阅读详情

相关推荐

cadence—virtuosoic617的使用技巧收集区

cadence使用

qq_33599939的博客 3万+

java-链表的增删改查

java对链表的操作

H_xxxxd的博客 1555

中文实体关系抽取数据集大盘点:从百度Duie2.0到医疗CBLUE,哪个更适合你的NLP项目?

本文全面分析了中文实体关系抽取领域的主流数据集,包括百度DuIE 2.0、医疗CBLUE等,帮助开发者根据项目需求选择最适合的数据集。文章详细对比了各数据集的特点、适用场景及优化策略,为自然语言处理项目提供实用指南。

weixin_29284657的博客 121

单链表(增删改查)【超详细】

单链表的存储与顺序表的存储不一样,单链表不仅仅存放数值,还要存放下一个结点的地址代码//存放单链表的值//存放下一个单链表的地址}SLNode;当有了单链表的存储定义,我们就可以对单链表进行存放结点。

加油!!! 4315

linux下使用Ollama本地部署LLM

Ollama 是一个用于在本地运行大语言模型(如 Llama 2、Mistral、Gemma、Qwen 等)的工具,支持模型的拉取、运行、管理等功能。当你运行ollama。

u013218342的博客 1659

DEM高程数据的获取、合并与坐标转换

DEM高程数据的获取、合并与坐标转换一、DEM数据的获取二、数据合并三、投影转换方法一四、投影转换方法二 今天用DEM数据做了一个坡度分析,数据使用过程中涉及到投影坐标转换,由于不是很熟悉所以费了一番功夫。经过一番折腾总结出两个方法,方法一自认为比较便捷的方法,即通过BIGMAP软件中工具列表中的投影转换功能进行。方法二为传统方法,即在Arcgis中用投影栅格工具进行转换。 一、DEM数据的获取 在地理空间数据云网站下载DEM数据(精度包括30米和90米),数据格式为tif格式或img格式,坐标为WGS_1

weixin_48625651的博客 1万+

数据结构 - 单链表 (增删查改详解)

数据结构-单链表(增删查改详解)

xiaoHu_C的博客 1657

逆向CarPlay协议时,除了USB主从切换,你还需要注意这3个关键点

本文深入探讨逆向CarPlay协议时的3个关键点,包括MFi协议背景、多通道协同工作机制和协议分析工具的高级过滤技巧。特别解析了USB主从切换后的复杂交互过程,帮助安全研究员和逆向工程师更好地理解CarPlay协议的核心机制与潜在安全研究切入点。

weixin_29164497的博客 381

【数据结构】单链表的增删查改

在上一节中我们提到了顺序表有如下缺陷:在头部/中间的插入与删除需要挪动数据,时间复杂度为O(N),效率低;增容需要申请新空间,可能会拷贝数据,释放旧空间,会有不小的时间消耗;增容一般是呈2倍的增长,势必会有一定的空间浪费。例如当前容量为100,满了以后增容到 200,如果我们再继续插入了5个数据,后面没有数据插入了,那么会浪费95个数据空间;基于顺序表的这些不足,我们设计出了链表。

StandDev的博客 635

uniapp+openlayers集成天地图实战:renderjs通信陷阱与性能优化避坑指南

本文深入探讨了uniapp与openlayers集成天地图时的renderjs通信陷阱与性能优化策略。通过实战案例解析了renderjs的特殊通信机制、地图实例生命周期管理、图层懒加载等关键技巧,帮助开发者避免常见坑点,提升应用流畅度。特别针对多语言切换、热重载偏移等疑难问题提供了解决方案,是uniapp+openlayers开发者的实用避坑指南。

weixin_30872157的博客 362

【AUTOSAR-E2E】-1.4-详述E2E Transformer解决方案

共13页精讲 目录 1“Data Transformation”介绍 1.1 基于SOME/IP Transformer 1.2 基于COM Based Transformer 2 ComXf(COM Based Transformer)介绍 2.1 ComXf(COM Based Transformer)功能规范 2.2 ComXf(COM Based Transformer)提供的服务 2.3 配置注意事项 3 E2EXf(E2E Transformer)介绍 3.1 E2EX...

「汽车电子助手」的博客 4700

Java实现链表的增查改删(单链表、带头单链表、双向链表)

java链表万字详解,链表的增查改删 单链表、带头单链表、双向链表 1.1 单向链表 1.2 单链表增删查改 2.1 带头单链表 2.2 带头单链表增删查改

XHT117的博客 2356

华为OD机试真题 新系统2026-04-01 C++ 实现【勇攀数字高峰】

请你在给定的数字地形图中寻找登山路径,数字代表当前位置的海拔高度,要求从最低海拔出发,不断攀登,最终到达最高山峰。你需要寻找所有满足条件的登山路径。地图已经保证最低海拔和最高山峰都只有一个。

MISAYAONE的博客 376

单链表的增删改查(java实现)

早上起来完成了单链表的增删改查,上一篇中是傻瓜插入,这一篇中可以根据给入的编号进行添加,这次是用Java实现,重新完成了大一小学期的作业 一些亮点在程序注释中写的比较清楚了, 在判断插入位置是,node.no < temp.next.no 这个是值得回味的 因为程序是整体写完才整体测试的,所以完成代码很快,但是debug用了比较长的时间,得到的启发就是,写程序的时候考虑的周全一些,以后的de...

大道至简 1123

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

单链表中的增删改查-Java实现

优质文档值得推荐 [Java]单链表中的增删改查

天天向上 449

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

java单链表增删改查反转笔记

eslipse public class Linklist { public static void main(String[] args) { SingleLinkedList A =new SingleLinkedList(); //添加新节点 A.OrderAdd(new HeroNode(2,"卢俊义","玉麒麟")); A.OrderAdd(new HeroNode(1,"宋江","及")); A.OrderAdd(new HeroNode(3,"**","

qq_44829011的博客 225

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Java单链表的增删改查

单链表是一种常见的数据结构,它由一个节点序列组成,每个节点只包含一个指向下一个节点的指针。相比于其他链表结构,单链表的节点体积较小,因此常用于存储小型数据集,如栈、队列和链表等。单链表的节点结构通常包含一个数据域和一个指向下一个节点的指针。节点之间的链接是通过指针实现的,也就是说,第一个节点只有一个指向它的指针,而最后一个节点则只有一个指向第一个节点的指针。单链表的操作比较简单,主要包括添加节点、删除节点和遍历节点等。在添加节点时,只需要在末尾添加一个新节点即可。

m0_59540171的博客 2085

java单链表查询功能_Java实现单链表,包含增删改查以及排序等功能

单链表的Java类结构如下:下面上源码:1.定义链表结点类,每一个结点包含数据data和下一个结点的引用。package singlelinkedlist;/*** @date on 16:08 2018/8/14* @describe 模拟单链表的节点信息,这里将属性设为public不用设置get和set方法。*/public class Node {/*** 包含两个属性一个是结点数据,和下一...

weixin_39615984的博客 267

Java数据结构 单链表增删改查的使用和两个题目

目录 * 单链表的使用, //主函数 //创建节点 //创建链表 // 建立节点 // 建立链表 * 显示 * 不考虑编号顺序的添加 *排序的加入 * 通过编号修改节点信息 * 删除某节点 // 题1:求单链表中有效节点的个数 //题2:查看倒数第k个节点 /** * 单链表的使用, * 游戏英雄排行榜 * 功能:增删改查 * 缺陷:删改功能对不按顺序编辑的链表无用 * * 题1:求单链...

cbdA_ZAI的博客 585

Java实现带有头结点的单链表的增删改查!

Java实现带有头结点的单链表的增删改查! 在这里就不解释了,代码里有注释很容易看懂的! package List; /** * @author ganxiang * @IDE IntelliJ IDEA * @project_name JavaDemo * @filename SingalList * @date 2020/02/24 */ public class SignalL...

Ganxiang 670

Java如何实现单链表的增删改查

一、新建学生节点类 Stu_Node节点包含: 学号:int num; 姓名:String name; 性别:String gender; 下一个节点:Stu_Node next; 为了便于打印节点内容需要重写toString方法 class Stu_Node{ int num; String name; String gender; Stu_Node next; @Override public String toString() { re

p1830095583的博客 351

java实现单链表的增删改查

java实现单链表的增删改查 链表: 链表是由节点组成的,节点是next域连接起来的,每个节点=data+next,同时链表在内存中是不连续的。 特点: 1.访问某个特定的节点,从头开始去找 2.删除、添加某一个特定的节点到某一个位置,只需要找到前一个节点,即可直接添加或删除 3.链表是一种内存上不连续的数据结构 创建一个单链表 protected Node<E> head;//头节点...

ccuaman的博客 369

JAVA语言实现单链表的增删改查

package yu.practice03.Linkedlist; import org.w3c.dom.ls.LSOutput; import java.util.Stack; public class singlelistDemo { public static void main(String[] args) { PersonNode person01 = ne...

只不停的博客 394

Java实现单链表,包含增删改查以及排序等功能

单链表的Java类结构如下: 下面上源码: 1.定义链表结点类,每一个结点包含数据data和下一个结点的引用。 package singlelinkedlist; /** * @date on 16:08 2018/8/14 * @describe 模拟单链表的节点信息,这里将属性设为public不用设置get和set方法。 */ public class Node { ...

qingxixiansheng的博客 2334

java单链表 提供增删改查_java实现单链表增删改查的实例代码详解

package 数据结构算法.链表;/**定义节点* 链表由节点构成*/public class Node {private E e; //数据dataprivate Node next; //指向下一个节点public Node() {}public Node(E e) {this.e = e;}public Node getNext() {return next;}public void s...

weixin_42360733的博客 100

单链表增删改查(Java)

帮助初学者快速理解单链表概念

qq_58306256的博客 254
上一篇: 队列和环形队列
下一篇: 约瑟夫环问题
interesting_code
博客等级 码龄7年 38粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值