Java数据结构:链表

2. 链表(LinkedList)

2.1 简介

  • 链表是一种线性表,但不按线性顺序存储,存储数据的内存空间不连续

  • 执行复杂度:

    • 插入和删除:O(1),仅需要知道目标元素的上一个元素
    • 查找和访问特定节点:O(n)
  • 与数组相比:

    • ****非随机访问:存取第N个数据时需要访问前(N-1)个数据
    • 容量不固定,支持动态扩容。不需要预先知道数据大小,充分利用存储空间,实现内存动态管理
    • 占用更多空间:链表中每个结点需要额外存放指向其他节点的指针
    • 数组使用的是连续内存空间对 CPU 的缓存机制友好,链表则相反。
  • 应用场景

    • 存储元素个数不确定,需要经常添加和删除数据;反之使用该数组
    • 不需要支持随机访问

2.2 分类

常见链表有:

  1. 单链表
  2. 双向链表
  3. 循环链表
  4. 双向循环链表

2.2.1 单链表

  • 单链表只有一个方向,结点只有一个后继指针next指向后面的结点。
  • 链表有一个头结点(head),头结点一般不存储信息指针指向第一个元素结点的存储位置
  • 尾结点通常指向null

2.2.2 循环链表

循环链表是一种特殊的单链表,它的尾结点指向链表的头结点

2.2.3 双向链表

双向链表包含两个指针,一个prev指向前一个结点,一个next指向后一个结点

2.2.4 双向循环链表

双向循环链表的:

  • 尾结点的next指向头结点
  • 头结点的prev指向尾结点
posted @ 2022-03-22 16:18  chachan53  阅读(112)  评论(0编辑  收藏  举报