单链表

1.简单介绍

(1)单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。
(2)链表的各个节点不一定是连续存储
(3)链表分为带头结点的链表和不带头结点的链表,在实际中根据需求来确定

2.单链表的应用实例

使用带 head 头的单向链表实现 –水浒英雄排行榜管理完成对英雄人物的增删改查操作
注:在执行添加操作时,是根据排名进行添加的,而不是直接在尾部进行添加

3.思路分析(具体细节见代码)

添加
(1)创建临时变量temp,借助temp遍历单链表
(2)找到要添加元素的前一个位置,执行 heroNode.next=temp.next; temp.next=heroNode;

删除:
(1)创建临时变量temp,借助temp遍历单链表
(2)找到要删除元素的前一个位置,执行 temp.next=temp.next.next;

更新:
(1)创建临时变量temp,借助temp遍历单链表
(2)找到该元素所在位置,对其进行更改

4.代码实现

package cn.zzw.algorithm.LinkedList;public class SingleLinkedListDemo {public static void main(String[] args) {HeroNode hero1=new HeroNode(1,"宋江","及时雨");HeroNode hero2=new HeroNode(2,"卢俊义","玉麒麟");HeroNode hero3=new HeroNode(3,"吴用","智多星");HeroNode hero4=new HeroNode(4,"林冲","豹子头");//创建链表SingleLinkedList list=new SingleLinkedList();//添加英雄list.add(hero2);list.add(hero1);list.add(hero4);list.add(hero3);System.out.println("更改英雄之前的链表");list.show();//更改英雄内容HeroNode newHeroNode=new HeroNode(3,"有用","小智");list.update(newHeroNode);System.out.println("更改英雄之后的链表");list.show();//显示链表元素System.out.println("删除英雄之前的链表");list.show();//删除英雄list.delete(1);System.out.println("删除英雄之后的链表");list.show();}
}//定义HeroNode,每个HeroNode对象就是一个英雄对象
class HeroNode
{public int no;public String name;public String nikename;public HeroNode next;//指向下一个结点public HeroNode(int no,String name,String nikename){this.no=no;this.name=name;this.nikename=nikename;}@Overridepublic String toString() {return "HeroNode{" +"no=" + no +", name='" + name + '\'' +", nikename='" + nikename + '\'' +'}';}
}//定义SingleLinkedList
class SingleLinkedList
{//初始化头结点,不存放具体数据private HeroNode head=new HeroNode(0,"","");//根据英雄的no号的大小进行添加public void add(HeroNode heroNode){//头结点不能动,需要借助一个辅助变量temp来遍历链表HeroNode temp=head;//标志当前链表中是否有该英雄,若有,则返回true,并不能再进行插入boolean flag=false;while (true){if(temp.next==null){//此时说明已经遍历到链表尾部break;}if(temp.next.no>heroNode.no){//说明已经找到待插入元素的前一个结点tempbreak;}else if(temp.next.no==heroNode.no){flag=true;//说明该英雄已经存在break;}temp=temp.next;}if(flag){System.out.println("该英雄已经存在,无法进行插入");}else{//进行插入heroNode.next=temp.next;temp.next=heroNode;}}//修改英雄的信息,不能改no,因为no是英雄的唯一标志,修改了相当于新添加了一个public void update(HeroNode newHeroNode){if(head.next==null){System.out.println("链表为空");return;}HeroNode temp=head.next;//标志当前链表中有没有该英雄boolean flag=false;while(true){if(temp==null){//说明已经到了链表末尾break;}if(temp.no==newHeroNode.no){//表示已经找到该英雄flag=true;break;}temp=temp.next;}if(flag){//更改英雄的内容temp.name=newHeroNode.name;temp.nikename=newHeroNode.nikename;}else{//说明该链表中没有该英雄System.out.println("链表中没有该英雄");}}//删除英雄的结点public void delete(int no){HeroNode temp=head;boolean flag=false;while (true){if(temp.next==null){break;}if (temp.next.no==no){flag=true;break;}temp=temp.next;}if (flag){//可以删除temp.next=temp.next.next;}else{System.out.println("要删除的结点不存在");}}//遍历链表public void show(){//判断链表是否为空if(head.next==null){System.out.println("链表为空");return;}HeroNode temp=head.next;while (true){if(temp==null)break;System.out.println(temp);temp=temp.next;}}
}

5.测试结果

"C:\Program Files\Java\jdk1.8.0_181\bin\java.exe" "-javaagent:D:\IntelliJ IDEA\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=3216:D:\IntelliJ IDEA\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_181\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\rt.jar;C:\Users\1\IdeaProjects\algorithm\out\production\algorithm" cn.zzw.algorithm.LinkedList.SingleLinkedListDemo
更改英雄之前的链表
HeroNode{no=1, name='宋江', nikename='及时雨'}
HeroNode{no=2, name='卢俊义', nikename='玉麒麟'}
HeroNode{no=3, name='吴用', nikename='智多星'}
HeroNode{no=4, name='林冲', nikename='豹子头'}
更改英雄之后的链表
HeroNode{no=1, name='宋江', nikename='及时雨'}
HeroNode{no=2, name='卢俊义', nikename='玉麒麟'}
HeroNode{no=3, name='有用', nikename='小智'}
HeroNode{no=4, name='林冲', nikename='豹子头'}
删除英雄之前的链表
HeroNode{no=1, name='宋江', nikename='及时雨'}
HeroNode{no=2, name='卢俊义', nikename='玉麒麟'}
HeroNode{no=3, name='有用', nikename='小智'}
HeroNode{no=4, name='林冲', nikename='豹子头'}
删除英雄之后的链表
HeroNode{no=2, name='卢俊义', nikename='玉麒麟'}
HeroNode{no=3, name='有用', nikename='小智'}
HeroNode{no=4, name='林冲', nikename='豹子头'}Process finished with exit code 0

三、单链表增删改查原理和代码实现相关推荐

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

    package 数据结构算法.链表; /* *定义节点 * 链表由节点构成 */ public class node { private e e; //数据data private node next ...

  2. Java程序-单链表增删改查(实现对水浒人物的增删改查操作)

    单链表增删改查(实现对水浒人物的增删改查操作) 前言 一.链表(Linked List)介绍 二.应用实例 1.问题描述 2.代码实现 总结 前言 参考:B站,尚硅谷数据结构与算法 课程 一.链表(L ...

  3. springboot整合mybatis实现简单的单表增删改查(完整代码可下载)

    搭建项目 项目简单效果,前端效果丑的一批,主要是后端功能实现: springboot增删改查 csdn完整代码下载链接: springboot+mybatis Gitee下载地址: Gitee下载地址 ...

  4. 数据结构----单链表增删改查

    单链表的增删改查 一.链表(Linked List) 链表是有序列表,以节点的方式来存储的,链式存储: 每个节点包含data域,next域:指向下一节点: 链表的各个节点不一定是连续存储: 链表分为带 ...

  5. 数据结构单链表SingleLinkedList,Java实现单链表增删改查

    文章目录 链表介绍 应用示例 链表介绍 链表是有序的列表,但是它在内存中是存储是不连续的,如下: 链表是以节点的方式来存储,是链式存储: ①每个节点包含data域存储数据,next域指向下一个节点 ② ...

  6. 数据结构,单链表讲解,并使用Java代码实现单链表增删改查【尾部添加,中间插入、修改节点、删除节点、展示链表】

    文章目录 单链表 什么是单链表,链式存储结构详解 链表的节点 头节点,头指针和首元节点 单链表的实现 1.尾部添加新节点 思路分析 代码实现 注意事项 2.按照编号插入新节点 思路分析 代码实现 注意 ...

  7. 无表头单链表增删改查操作

    1.返回单链表中第pos个结点中的元素,若pos超出范围,则返回0 2.把单链表中第pos个结点的值修改为x的值,若修改成功返回1,否则返回0 3.向单链表的表头插入一个元素 4.向单链表的末尾添加一 ...

  8. MySQL基础知识-MySQL概述安装,单表增删改查,函数,约束,多表查询,事物

    MySQL基础知识-MySQL概述安装,单表增删改查,函数,约束,多表查询,事物 前言 1.MySQL概述 1.1数据库相关概念 1.2MySQL数据库 1.2.1版本 1.2.2下载 1.2.3安装 ...

  9. mysql如何修改学生表_MySQL 详细单表增删改查crud语句

    MySQL 增删改查语句 1.创建练习表 这里练习表没有满足三范式 第一范式(又称 1NF):保证每列的原子性 数据表中的每一列(字段),必须是不可拆分的最小单元,也就是确保每一列的原子性.满足第一范 ...

最新文章

  1. ubuntu联网经常掉线的解决方法
  2. “国产操作系统最大难题在于解决「生产关系」” | 人物志
  3. NSIS安装制作程序
  4. 阿里云迁云方式大汇总
  5. php 修改css 不生效,HTML外部引用CSS文件不生效原因分析及解决办法
  6. 01Prism WPF 入门实战 - 项目准备
  7. 菜鸟学Java(六)——简单验证码生成(Java版)
  8. 带有托管代码的InfoPath2007表单模版发布到SharePoint表单库(浏览器方式查看)
  9. 解决ios上微信无法捕获返回键按钮事件的问题
  10. 走美团特色的无人配送道路,王慧文:久久为功才能做成
  11. CCF NOI1032 菱形
  12. jQuery Ajax 前端和后端数据交互的问题
  13. 嵌入式视频采集编程思路(Video 4 Linux)-转
  14. mysql建表语句转换成oracle,如何手动将ORACLE的sql建表语句转换为MYSQL的建表语句...
  15. python调用excel宏函数,封装
  16. Keil C51 的printf
  17. 网络模块封装-axio
  18. java 通用工具 POI XSSF导出.xls或者.xlsx
  19. Scrolling and zooming chart with ChartScroller
  20. csp试题2:二十四点

热门文章

  1. C盘满了怎么办?如何清理
  2. LeetCode 845. 数组中的最长山脉
  3. Genome Biology | 基于RNA-seq的孟德尔疾病变异分析
  4. Nat. Genet. | 基于CRISPRi技术检测增强子与启动子相互作用
  5. CentOS Linux 7 安全基线设置
  6. 青年生命科学论坛报告:扩增子和宏基因组数据分析与可视化流程—刘永鑫(北京210606)...
  7. 微生物基因组分类数据库GTDB和软件GTDB-Tk
  8. 行业盛会!2018中国人体微生物组大会
  9. 简单读懂微生物基因组的泛基因组学
  10. R语言使用trimws函数:trimws函数去除(删除、remove)字符串头尾的空格