Java数据结构之单链表详解

 更新时间:2021年05月17日 11:26:37   作者:rain67  
在之前的学习中,我们主要了解了很多 Java 的 基本语法,但是在之后的 Java学习中,了解基础数据结构的知识非常重要,数据结构的思想可以帮助我们更加清晰明白的了解 Java 的解题思路等等.今天我们就来开始学习实现一个Java基础的单链表,需要的朋友可以参考下

一、图示

在这里插入图片描述

二、链表的概念及结构

链表是一种物理存储结构上非连续存储结构,数据元素的逻辑顺序是通过链表中的引用链接次序实现的 。

实际中链表的结构非常多样,以下情况组合起来就有8种链表结构:

单向、双向

带头、不带头

循环、非循环

今天,我们实现的是一个 单向 无头 非循环的链表。

下面是此链表的结构组成。

在这里插入图片描述

三、单链表的实现

(1)定义一个节点类型

我们创建一个 ListNode 的类作为节点类型,那么我们如何定义成员属性呢?

通过上面的结构分析,我们需要定义两个成员变量 val --作为该节点的存储的数值, next – 保存下一个节点的地址/引用。

同时定义之后,他们的默认值为 0 ,null ,所以要想赋予这个节点数值,要写一个构造方法去首先保存数值。

在这里插入图片描述

这里我们提供了两个构造方法,一个是实现提供数值的节点,另一个是没有提供数值的节点,方便我们之后使用。

之后我们在 MyListNode 的类中实现单链表的各种方法。

在这里插入图片描述

(2)头插法

在这里插入图片描述

以上述结构为例,这个单链表没有专门的傀儡节点来充当头节点,首个节点就定义为头节点,所以头插法,就是我们定义一个节点,插在这个链表的最前面,作为新的 head。

代码实现:

1.定义一个插入的节点

 ListNode cur = new ListNode(2);

在这里插入图片描述

此时我们就创建了一个val 为2 的节点。

2.插在头节点的前面

这里分两种情况,

第一次插入节点

不是第一次插入节点

头插之后的结构:

在这里插入图片描述

代码实现:

在这里插入图片描述

(3)尾插法

和头插法类似,同样插入一个节点,在链表的最后。

在这里插入图片描述

这里插入也分为两种情况

第一次插入节点

不是第一次插入节点

代码实现:

在这里插入图片描述

(4)根据下标插入节点

第一个数据节点为0号下标,任意位置插入节点。

还以上面的链表为例,我们想将新的节点插入到2 号位置

在这里插入图片描述

如果想插到2号位置,我们需要改变原来的 1号位置节点和2号位置节点的相关属性。

思路实现:

  1.先判断传入的 index 下标位置是否合法

  2.如果传入的index==0,头插法

  3.如果传入的index==sizeof(),尾插法

  4.如果 sizeof() > index > 0 在链表中间插入,我们首先要找到 index-1 位置的节点 prev

查找 index-1

在这里插入图片描述

修改 prev节点的属性 以及 新节点的属性

  node.next = prev.next
     prev.next = node;

代码实现过程

在这里插入图片描述

(5)查找关键字

在这里插入图片描述

以上面的链表为例,我们现在要查找这个链表中是否出现 val=20 的节点,如果存在,那么返回true,如果不存在,则返回 false.

遍历链表,走过每一个节点,如果 cur.val == key,则 return ture ,遍历完后还未找到 key,那么return false.

在这里插入图片描述

(6)删除第一次出现的关键字

在这里插入图片描述

思路实现:

在这里插入图片描述

代码实现:

在这里插入图片描述

(7)得到单链表的长度

在这里插入图片描述

(8)单链表打印展示

在这里插入图片描述

不能是this.head.next != null 这样写 最后一个节点是不能被打印的

(9)节点的回收

节点的回收有两种方式:

  1.暴力法

直接将head 置空

  2. 挨个置空

遍历单链表,将每一个节点的next都置为 null.

在这里插入图片描述

四、完整代码的展示

在这里插入图片描述

到此这篇关于Java数据结构之单链表详解的文章就介绍到这了,更多相关Java单链表内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java模拟微信来电提醒示例

    Java模拟微信来电提醒示例

    这篇文章主要为大家介绍了Java模拟微信来电提醒示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • Java SSM框架(Spring+SpringMVC+MyBatis)搭建过程

    Java SSM框架(Spring+SpringMVC+MyBatis)搭建过程

    最近一段时间搭建了ssm环境,并测试了几个小项目,下面小编通过图文并茂的形式给大家分享Java SSM框架(Spring+SpringMVC+MyBatis)搭建过程,需要的朋友参考下吧
    2017-11-11
  • IDEA 2022 中的Lombok 使用基础教程

    IDEA 2022 中的Lombok 使用基础教程

    ​ Lombok是使用java编写的一款开源类库。其主作用是使用注解来代替一些具有格式固定,没有过多技术含量的编码工作,这篇文章主要介绍了IDEA 2022 中的Lombok 使用基础教程,需要的朋友可以参考下
    2022-12-12
  • Feign调用中的两种Header传参方式小结

    Feign调用中的两种Header传参方式小结

    这篇文章主要介绍了Feign调用中的两种Header传参方式小结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • Java判断字符串是不是数字过程解析

    Java判断字符串是不是数字过程解析

    这篇文章主要介绍了Java判断字符串是不是数字过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • SpringBoot中缓存注解的使用详解

    SpringBoot中缓存注解的使用详解

    为了实现缓存,Spring Boot 提供了一些缓存注解,可以方便地实现缓存功能,这篇文章主要介绍了SpringBoot中常用的缓存注解的使用方法,需要的可以参考一下
    2023-06-06
  • SpringBoot中的文件上传和异常处理详解

    SpringBoot中的文件上传和异常处理详解

    这篇文章主要介绍了SpringBoot中的文件上传和异常处理详解,对于机器客户端,它将生成JSON响应,其中包含错误,HTTP状态和异常消息的详细信息,对于浏览器客户端,响应一个"whitelabel"错误视图,以HTML格式呈现相同的数据,需要的朋友可以参考下
    2023-09-09
  • Spring Boot如何优化内嵌的Tomcat示例详解

    Spring Boot如何优化内嵌的Tomcat示例详解

    spring boot默认web程序启用tomcat内嵌容器,监听8080端口,下面这篇文章主要给大家介绍了关于Spring Boot如何优化内嵌Tomcat的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-09-09
  • spring中的BeanFactory与FactoryBean的讲解

    spring中的BeanFactory与FactoryBean的讲解

    今天小编就为大家分享一篇关于spring中的BeanFactory与FactoryBean的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • 解决IntelliJ IDEA创建spring boot无法连接http://start.spring.io/问题

    解决IntelliJ IDEA创建spring boot无法连接http://start.spring.io/问题

    这篇文章主要介绍了解决IntelliJ IDEA创建spring boot无法连接http://start.spring.io/问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08

最新评论