1、什么是链表,链表的定义?
通俗的说就是通过指针将一组零散的内存块串联在一起。其中,我们把内存块称为链表的 "节点"。
为了将所有的节点串在一起,每个链表的节点除了存储数据之外,还要记录下一个节点的地址。
-
单向链表
对单链表来说有两个节点比较特殊分别是第一个被称为头节点和最后一个尾节点,头节点又用来记录链表的基地址,有了它我们就可以遍历整个链表,而尾节点的特殊是的它的指针指的不是下一个节点而是空地址null,表示链表上的最后一个节点。
-
双向链表
双向链表,顾名思义,它支持两个方向,每个节点不止有一个指针next 指向下一个节点,还有个前驱指针prev指向前面的节点。双向链表需要额外的两个空间来存储前驱节点和后驱的地址。所以双向链表比单向的多占空间,但是因为支持双向遍历,所以比单向链表更灵活,查询更快。
如图:
-
分析对比数组优缺点:
能够很方便的增加/删除节点。数组的在删除和新增数据时,需要移动其它数据项。
在查询的时候没有数组快,数组可以直接根据索引直接定位。而链表无论时单向链表还是双向链表都需要一个节点一个节点的进行查找。 -
从内存存储看:
数组是从栈中分配空间,并且按顺序存储,一开始就需要定义好,这样会导致内存浪费。也会导致下标越界。
链表是从堆中分配空间,无序随机。可以动态,管理不好会导致内存溢出。
public class SingelLinkedList {
private ListN