Java链表的定义
链表是一种常见的数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针。
链表是以节点的方式来存储, 是链式存储,是通过链表中的指针连接次序实现的。
Java链表的数据结构
链表结是由许多节点构成的,每个节点都包含两部分:
1)数据部分:保存该节点的实际数据;
2)地址部分:保存的是上一个或下一个节点的地址。
Java链表的特点
链表具有如下特点:
- 虽然时线性表,结点之间也是有顺序的,但是根据位置访问元素时间复杂度很高;
- 链表不需要连续内存,整体来讲对内存比较友好;
- 根据某个结点可以直接访问到其后继结点,或前继结点(双向链表);
- 链表是由多个结点构成,但一般只存储头结点或者头尾结点,元素不支持随机访问,只能顺序遍历访问;
- 通常来讲链表的插入和删除比数组高效(但也得分情况)。
Java链表的分类
链表分类主要包含如下三类:
1)单向链表
链表中最简单的一种是单向链表,或叫单链表。
它包含两个域:一个数据域和一个指针域,指针域用于指向下一个节点,而最后一个节点则指向一个空值。
具体如下图所示:
单链表的遍历方向单一,只能从链头一直遍历到链尾,所以有一个比较大的缺点:当要查询某一个节点的前一个节点时,只能再次从头进行遍历查询,因此效率比较低。
这个时候双向链表就派上用场了,双向链表的出现恰好解决了这个问题。
2)双向链表
双向链表也叫双面链表,它的每个节点由三部分组成:prev 指针指向前置节点,此节点的数据和 next 指针指向后置节点。
具体如下图所示:
3)双向循环链表
双向循环链表,定义了前后指针,而且链表形成一个闭环,实现了从每一个节点都可以遍历到所有节点,并且可以两个方向遍历。
具体如下图所示:
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》