【常见集合篇07】LinkedList数据结构-链表

56 阅读2分钟

链表分类

  • 单向链表
  • 双向链表

单向链表

  • 链表中的每一个元素称为结点(Node)
  • 物理存储单元上,非连续、非顺序的存储结构
  • 单向链表:每个结点包括两部分:一个是存储数据元素的数据域,另一个是存储下一个结点的指针域。记录下一个结点地址的指针叫做后继指针next

image.png

image.png

单向链表时间复杂度分析

image.png

查询操作

  • 只有在查询头节点的时候不需要遍历链表,时间复杂度O(1)
  • 查询其他结点需要遍历链表,时间复杂度是O(n)

插入/删除操作

image.png

  • 只有在添加和删除头节点的时候,不需要遍历链表,时间复杂度O(1)
  • 添加或删除其他节点需要遍历链表找到对应节点后,才能完成新增或删除节点操作,时间复杂度O(n)

双向链表

  • 每个节点有一个指向后一个结点next,还有一个指向前一个结点的prev

image.png

image.png

双向链表对比单向链表

  • 双向链表需要额外的两个空间来存储后继结点和前驱结点地址
  • 支持双向遍历

双向链表时间复杂度分析

image.png 查询操作

  • 查询头结点的时间复杂度是O(1)
  • 平均的查询时间复杂度是O(n)
  • 给定节点找前驱节点的时间复杂度O(1)

增删操作

  • 头尾节点增删的时间复杂度是O(1)
  • 其他部分节点增删的时间复杂度是O(n)
  • 给定节点增删的时间复杂度是O(1)