单向链表及使用Java代码实现
一:单向链表:
(1):链表是以节点的形式存储数据,节点对象中存储了要保存的数据。
(2):单向链表中的每一个节点中都持有下一个节点的引用,通过上一个节点就可以找到下一个节点,依次串联,所以想要遍历整个单向链表就需要找到第一个节点。
(3):链表不同于数组,在内存中不一定是连续的空间,由于是节点存储,可以利用内存中零散的空间进行保存,只需持有下一个节点的地址即可。
二:接下来我们使用Java代码实现单向链表(不是故意写中文类名的,请勿喷)
public class 单向链表 {
public static void main(String[] args) {
HeroNode name1=new HeroNode(1,"小袁","世界上最帅的男人");
HeroNode name2=new HeroNode(2,"xx","xx");
HeroNode name3=new HeroNode(3,"ww","ww");
HeroNode name4=new HeroNode(4,"vv","xx");
SingleLinkedList singleLinkedList=new SingleLinkedList();
singleLinkedList.add1(name1);
singleLinkedList.add1(name4);
singleLinkedList.add1(name3);
singleLinkedList.add1(name2);
singleLinkedList.list();
System.out.println("修改后---------------");
HeroNode n=new HeroNode(2,"bb","bb");
singleLinkedList.update(n);
singleLinkedList.list();
System.out.println("删除后--------------");
singleLinkedList.delete(2);
singleLinkedList.list();
}
}
//管理信息
class SingleLinkedList{
//定义头节点,不存放具体数据
private HeroNode head=new HeroNode(0,"","");
//定义按顺序添加方法
public void add1(HeroNode heroNode){
//定义辅助变量
HeroNode temp=head;
//定义标志
boolean flag=false;
while (true){
if(temp.next==null){
break;
}
if(temp.next.SerialNumberheroNode.SerialNumber){
//说明位置找到,在temp后面插入
break;
}
else if(temp.next.SerialNumber==heroNode.SerialNumber){
//说明添加信息已存在
flag=true;
}
//后移遍历链表
temp=temp.next;
}
if(flag){
System.out.println("信息已存在");
}else {
//插入到链表
heroNode.next=temp.next;
temp.next=heroNode;
}
}
//定义修改节点方法
public void update(HeroNode newHeroNode){
if(head.next==null){
System.out.println("链表为空");
return;
}
//定义辅助变量
HeroNode temp=head.next;
//定义标志
boolean flag=false;
while (true) {
if (temp.next == null) {
break;
}
if(temp.SerialNumber==newHeroNode.SerialNumber){
flag=true;
break;
}
temp=temp.next;
}
if(flag){
temp.name=newHeroNode.name;
temp.information=newHeroNode.information;
}else {
System.out.println("没有找到");
}
}
//定义删除方法
public void delete(int SerialNumber){
HeroNode temp=head;
boolean flag=false;
while (true){
if(temp.next==null){
break;
}
if(temp.next.SerialNumber==SerialNumber){
flag=true;
break;
}
temp=temp.next;
}
if(flag){
temp.next=temp.next.next;
}
}
//遍历
public void list(){
//判断链表是否为空
if(head.next==null){
System.out.println("链表为空");
return;
}
//定义辅助变量
HeroNode temp=head.next;
while (true){
//判断是否到链表最后
if(temp==null){
break;
}
System.out.println(temp);
//将temp后移,不然会死循环
temp=temp.next;
}
}
}
class HeroNode{
public int SerialNumber;
public String name;
public String information;
//指向下一个节点
public HeroNode next;
public HeroNode(int SerialNumber,String name,String information){
this.SerialNumber=SerialNumber;
this.name=name;
this.information=information;
}
@Override
public String toString() {
return "HeroNode{" +
"SerialNumber=" + SerialNumber +
", name='" + name + '\'' +
", information='" + information + '\'';
}
}
运行结果:
单向链表及使用Java代码实现 相关文章
python-pyplot库中legend函数即参数使用
1.图例legend基础语法及用法 legend语法参数如下: matplotlib.pyplot.legend(*args,**kwargs) Keyword Description loc Location code string, or tuple (see below).图例所有figure位置 prop the font property字体参数 fontsize the font size (used only
antd中踩坑相关记录
随用随记 1、项目需要,使用antd的tree功能开发过程中,需要对treenode进行编辑,上移,下移等操作。 其他的功能btn,可以用e.stopPropagation()来阻止冒泡。但是input就不行了 treenode的select功能开启,点击treenode来切换右侧展示数据,所以没办法关闭 i
时序图的使用习惯
是什么 一种UML交互图, 通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作。 使用场景 梳理业务流程 刚好最近接手一个业务模块,参考原有文档,与交接人的沟通,相关代码梳理出一份时序图,并上传至项目文档空间里 时序图角色 角色Actor 系统
python-matplotlib库label函数参数即使用
```pythonimport matplotlib.pyplot as pltimport numpy as np# 定义数据x = np.linspace(-3, 3, 50)y1 = 2*x + 1y2 = x**2# 定义figureplt.figure()# 绘图(x,y2)plt.plot(x, y2)# 绘图(x,y1)plt.plot(x, y1, color='red', linewidth=1.0, linestyle='--')#
C语言指针知识点总结
1.指针的使用和本质分析(1)初学指针使用注意事项 1)指针一定要初始化,否则容易产生野指针(后面会详细说明); 2)指针只保存同类型变量的地址,不同类型指针也不要相互赋值; 3)只有当两个指针指向 同一个数组中的元素 时,才能进行指针间的运算和比较
C++迭代器模式封装多叉树
多叉树存储的方式: 采用链表的方式维护子节点,每个结点的child指针指向子节点链表的首节点。通过next指针即可遍历子节点链表。 采用迭代器模式的设计思路,封装了多叉树dfs遍历接口:iterator_node以及bfs遍历接口:iterator_leval_node。 iterator_node的
Java学习之Thymeleaf使用
Java学习之Thymeleaf使用 0x00 前言 为了后续的代码审计一些常用的框架和技术都是有必要了解一下,在此重拾Spring Boot等开发知识内容。 0x01 Thymeleaf简介 Thymeleaf是一个现代的服务器端Java模板引擎的web和独立的环境,能够处理HTML, XML, JavaScript, C
python里面的函数定义与使用
~什么是函数 !函数是一段具有特定功能的、可重用的语句组,是一种功能的抽象。一般函数表达特定功能。 ~它的一般表示形式为: def 函数名(参数): 函数体 return 返回值 注意:上面的参数可有可无,但是我们括号一定得有。 示例: def fact(n):s=1for i in r
moment.js 使用方法
目录 转载https://www.cnblogs.com/renyi-fan/p/12743608.html v 一、总结(点击显示或隐藏总结内容) 一句话总结: Moment.js是一个轻量级的JavaScript时间库,它方便了日常开发中对时间的操作,提高了开发效率。日常开发中,通常会对时间进行下面这几个操
【WPF学习笔记】WPF中使用ValidationRule自定义验证规则
WPF中使用ValidationRule自定义验证规则 本文主要是展示在 WPF 中使用 ValidationRule 自定义验证规则,同时展示两种错误响应方式。一种是通过 Behavior 传递到 ViewModel 中,然后进行错误信息响应;一种是直接在 View 中遍历当前也的所有错误元素,在页面