Java链表详解(数据结构特点及3大分类)

Java链表详解(数据结构特点及3大分类)-mikechen

Java链表的定义

链表是一种常见的数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针。

链表是以节点的方式来存储, 是链式存储,是通过链表中的指针连接次序实现的。

 

Java链表的数据结构

链表结是由许多节点构成的,每个节点都包含两部分:

Java链表详解(数据结构特点及3大分类)-mikechen

1)数据部分:保存该节点的实际数据;

2)地址部分:保存的是上一个或下一个节点的地址。

 

Java链表的特点

链表具有如下特点:

  • 虽然时线性表,结点之间也是有顺序的,但是根据位置访问元素时间复杂度很高;
  • 链表不需要连续内存,整体来讲对内存比较友好;
  • 根据某个结点可以直接访问到其后继结点,或前继结点(双向链表);
  • 链表是由多个结点构成,但一般只存储头结点或者头尾结点,元素不支持随机访问,只能顺序遍历访问;
  • 通常来讲链表的插入和删除比数组高效(但也得分情况)。

 

Java链表的分类

链表分类主要包含如下三类:

1)单向链表

链表中最简单的一种是单向链表,或叫单链表。

它包含两个域:一个数据域和一个指针域,指针域用于指向下一个节点,而最后一个节点则指向一个空值。

具体如下图所示:

Java链表详解(数据结构特点及3大分类)-mikechen

单链表的遍历方向单一,只能从链头一直遍历到链尾,所以有一个比较大的缺点:当要查询某一个节点的前一个节点时,只能再次从头进行遍历查询,因此效率比较低。

这个时候双向链表就派上用场了,双向链表的出现恰好解决了这个问题。

 

2)双向链表

双向链表也叫双面链表,它的每个节点由三部分组成:prev 指针指向前置节点,此节点的数据和 next 指针指向后置节点。

具体如下图所示:

Java链表详解(数据结构特点及3大分类)-mikechen

 

3)双向循环链表

双向循环链表,定义了前后指针,而且链表形成一个闭环,实现了从每一个节点都可以遍历到所有节点,并且可以两个方向遍历。

具体如下图所示:

Java链表详解(数据结构特点及3大分类)-mikechen

 

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法