2.链表

作者: conanlee88 | 来源:发表于2020-05-10 15:20 被阅读0次

链表

特点

  • 不需要一块连续的内存空间,它通过“指针”将一组不连续的内存空间串联起来使用

常见的链表结构

单向链表

  • 只有一个后继指针next
  • 与数组相比,删除和插入操作比较方便,复杂度为O(1),而随机访问性不如数组,复杂度为O(n)

单向循环链表

  • 与单向链表相比,从尾结点到头节点的访问比较方便
  • 当要处理的数据具有环形的特点时,特别适合使用循环链表

双向链表

  • 多了一个前驱指针prev

  • 与单向链表相比,访问节点要更灵活,但是占用内存要更多

  • 在某些情况下,双向链表的插入和删除操作要比单向链表更高效

    • 在指定节点前插入节点
    • 删除给定指针指向的节点
  • 容器实例:LinkedHashMap

  • 设计思想:用空间换时间

双向循环链表

与数组的对比

  • 数组优点是使用简单,随机访问性好;缺点是大小固定,如果声明过大,会导致空间的浪费,并可能没有足够的内存可以分配,如果声明过小,则需申请更大的内存,并拷贝原有的数据,操作耗时

  • 链表缺点是随机访问性差;优点是天然支持扩容,对链表进行频繁的插入和删除操作时,会导致频繁的内存申请和释放,容易造成内存碎片,在java中则会导致GC频繁

链表代码技巧

  • 理解指针或引用的含义

  • 警惕指针丢失和内存泄露

  • 在插入节点的时候,要注意操作的顺序

  • 利用哨兵简化实现难度

    • 哨兵是解决边界问题的,不直接参与业务逻辑
    • 在任何时候,不管链表是不是为空,head始终指向这个哨兵节点,该链表称为带头链表;反之则是不带头链表
    • 在插入排序、归并排序、动态规划等都有体现哨兵思想
  • 留意边界条件处理

    • 链表为空的情况
    • 链表只包含一个节点的情况
    • 链表只包含两个节点的情况
    • 处理头节点和尾节点的情况
  • 举例画图,辅助思考

  • 多写多练

相关文章

  • 2.链表

    链表 特点 不需要一块连续的内存空间,它通过“指针”将一组不连续的内存空间串联起来使用 常见的链表结构 单向链表 ...

  • 2.链表

    一、链表和链表节点的实现 每个链表节点使用一个adlist.h/listNode结构表示: 多个listNode可...

  • 双向链表和双向循环链表

    双向链表 线性表-双向链表的结点结构: 带头结点的双向链表: 1.双向链表初始化 2.遍历双向链表 2.双向链表插...

  • 8.单向链表SingleLinkList

    目录:1.单向链表的定义2.单向链表的图解3.单向链表定义操作4.单向链表的实现 1.单向链表的定义 2.单向链表...

  • 9.双向链表DoubleLinkList

    目录:1.双向链表的定义2.双向链表的图解3.双向链表定义操作4.双向链表的实现 1.双向链表的定义 2.双向链表...

  • 链表-链表的建立以及增删操作

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

  • 2.链表(二)

    题目汇总https://leetcode-cn.com/tag/linked-list/92. 反转链表 II中等...

  • 2.单链表

    该部分包含以下内容-单链表的增删改查-计算链表长度-逆序链表-寻找(删除)链表倒数第K个元素-逆序打印链表(使用栈)

  • 2.循环链表

  • 数据结构笔记

    数据结构课程概览 ================== 1.顺序表 2.链表:单链表,单向循环链表,双链表...

网友评论

      本文标题:2.链表

      本文链接:https://www.haomeiwen.com/subject/iiejnhtx.html