概述
链表是继数组之外,另一个基本的线性数据结构,内存不需要连续。
每个节点中保存一个值,只能通过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指针也可以指向链表前面的节点,这种情况称为有环,如果指向第一个节点,被称为环形链表。
如果节点包含多个指向下一级的指针,这就是后面会介绍的树。