前端算法系列(5):链表

192 阅读1分钟

概述

链表是继数组之外,另一个基本的线性数据结构,内存不需要连续。
每个节点中保存一个值,只能通过next指针从一个节点访问下一个节点,因此链表问题通常需要迭代或递归解决,在到达链表结尾之前不知道链表长度。

js没提供原生实现。

链表实现

leetcode默认的链表节点表示为

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

其中val是节点上保存的值,next指向下一个节点,最后一个节点的next指向null。

以上只是最简单的链表,实际使用过程中还可能包含另一个指针prev,指向前一个节点,即双向链表。

最后一个节点的next指针也可以指向链表前面的节点,这种情况称为有环,如果指向第一个节点,被称为环形链表。

如果节点包含多个指向下一级的指针,这就是后面会介绍的树。

基本操作