Java 链表

一、链表介绍

数组和链表都是最基础的线性数据结构,可以用来实现栈,队列等非线性,有特定应用场景的数据结构。数组作为数据存储结构有很多缺陷,在无序数组中搜索效率低,在有序数组中插入效率又很低,无论哪种情况删除操作效率都很低。而且数组一旦创建,大小不可更改。除非是要频繁通过下标访问数据,否则在很多场合都可以用链表替换数组。

1️⃣什么是链表?

链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表通常由一连串节点组成,每个节点包含该节点的数据和指向上一节点或者下一节点的引用(链接)。如下图,在数据结构中,a1里面的指针存储着a2的地址,这样一个链接一个,就形成了链表。

①相邻元素之间通过指针链接
②最后一个元素的后继指针为NULL
③在程序执行过程中,链表的长度可以增加或缩小
④链表的空间能够按需分配
⑤没有内存空间的浪费

2️⃣链表的优缺点?

①优点:

  1. 插入和删除时不需移动其他元素,只需改变指针,效率高。
  2. 链表各个节点在内存中空间不要求连续,空间利用率高。
  3. 大小没有固定,拓展很灵活。

②缺点:查找数据时效率低,因为不具有随机访问性。

3️⃣链表的种类

单向链表、双向链表、循环单链表、循环双链表等等。

二、单向链表

单向循环链表。与单向线性链表不同的是,链表尾节点的后指针指向头节点。首尾相接构成环状结构。

单向线性链表。单向链表是最简单的链表,单链表节点包含两部分内容,一是存储数据信息,二是存储指向下一个节点的指针,叫做后指针。最后一个节点叫做尾节点,尾节点的后指针为 NULL。其中第一个节点叫做头节点,指向头结点的指针叫做头指针。

单向链表只可向一个方向遍历,一般查找一个节点的时候需要从第一个节点开始每次访问下一个节点,一直访问到需要的位置。

插入一个节点,对于单向链表,只提供在链表头插入,只需要将当前插入的节点设置为头节点,next 指向原头节点即可。

删除一个节点,将该节点的上一个节点的 next 指向该节点的下一个节点。

三、双端链表

如果想在单项链表尾部添加一个节点,那么必须从头部一直遍历到尾部,找到尾节点,然后在尾节点后面插入一个节点,这样操作很麻烦。如果在设计链表的时候多个对尾节点的引用,那么会简单很多。

四、双向链表

双向循环链表。与双向线性链表相比,头节点中的前指针指向尾节点,尾节点的后指针指向头节点,构成环状结构。

双向线性链表。每个节点除了存放本身元素以外,还需要保存指向下一个节点的指针,叫做后指针,以及指向前一个节点的指针,叫做前指针。双向线性链表中头节点的前指针为空,以及尾节点后指针也是空指针。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JFS_Study

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值