Skip to main content

定义

function ListNode(val, next) {
this.val = val === undefined ? 0 : val
this.next = next === undefined ? null : next
}

class LinkNode {
constructor(val, next) {
this.val = val
this.next = next
}
}

什么是链表,链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向 null(空指针的意思)。

链表的入口节点称为链表的头结点也就是 head。

如图所示: 链表1

链表操作的两种方式:

  • 直接使用原来的链表来进行操作。
  • 设置一个虚拟头结点在进行操作。
const ret = new ListNode(0, head) // 虚拟头节点

链表的类型

  • 单链表
  • 双链表
  • 循环链表

链表的存储方式

数组是在内存中是连续分布的,但是链表在内存中可不是连续分布的

性能分析

再把链表的特性和数组的特性进行一个对比,如图所示:

链表-链表与数据性能对比

数组在定义的时候,长度就是固定的,如果想改动数组的长度,就需要重新定义一个新的数组。

链表的长度可以是不固定的,并且可以动态增删, 适合数据量不固定,频繁增删,较少查询的场景。