JAVA简单实现单链表

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

以下是一个单链表的简单实现  将以图形和代码的形式进行描述


一、链表是什么?

1、链表是物理存储单元上非连续的、非顺序的存储结构,数据元素的逻辑顺序是通过链表的指针地址实现,有一系列结点(地址)组成,结点可动态的生成。

2、结点包括两个部分:(1)存储数据元素的数据域(内存空间),(2)存储指向下一个结点地址的指针域。

3、相对于线性表顺序结构,操作复杂。

4.链表分为 (1)单链表 (2)双链表 (3)单向循环链表 (4)双向循环链表

二、构造步骤

1.创建一个功能类和一个测试类

2.功能类实现

创造一个节点   可以把结构体理解成以下这个样子

以下是代码实现 创造一个Node类节点
class Node{
   public int date;
   public Node next;

   public Node(int date){
       this.date = date;
   }
}

1.构建一个简单的方法创建一个单链表

2.设计一个打印方法测试链表是否创建成功

 此处创建一个cur节点 是为了避免头节点head发生变化,利用cur节点进行遍历

此处需要注意的是  while (cur!= null)  里面的判断条件  在这里如果判断条件是  

cur.next != null  这样编写将会造成最后一个尾节点读取不到  因为此时读取到第四个节点

第四个节点的next为null 所以此时循环条件为false不进行 所以造成数据缺失

此时再测试类进行测试创造一个mainList1对象 

3.头插 尾插方法的构建

尾插的判断条件 cur.next != null 此时cur读取到尾节点停止 所以进行尾插就是 

把node赋给cur.next

4. 单链表长度

此处重点还是 while条件的判断  cur != nul 可以读取到最后一个节点

cur.next != null 读取不到最后一个节点  所以只要理解了这个条件的判断 就理解了单链表

5. 任意位置插入

分为三种情况 第一种插入位置为0 即是头插  第二种 插入位置为尾巴 即为尾插

第三种 任意位置插入  我们需要找到插入位置的前一个节点 因为前一个节点的next中

存储着下一个节点的位置   所以设计一个findIndexSub0ne方法  因为设计第一个数据节点为0下标

所以判断条件为index-1

此时我们还需要判断index的合法性 不能超出链表范围  并且构建一个异常类来抛出错误

由以下图我们可知如果读取到插入位置的下一个节点 我们将会找不到前一个节点

而如果我们去找前一个节点 前一个节点里存储着下一个节点的地址 这个时候就可

以解决这个问题  实现任意位置插入

6.实现删除第一次出现某一数据的节点

此时我们也需要去寻找key的前一个节点  所以我们设计一个searchPro方法

在这里我们可以用cur.next.val直接去读取cur的下一个节点的date值 

这样就可以得到第一次出现某一需要删除数据的前一个节点

在进行remove方法时  如果头节点为null  则直接return 退出方法

如果头节点的date值为这一数据  则将头节点设置为下一节点 head=head.next

还有就是 通过searchPro方法得到了节点cur  则可以通过cur.next.next 完成操作

 

 7.删除所有值为key的节点


总结

以上就是今天要讲的内容,本文仅仅简单介绍了单链表的一些方法的实现.

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值