链表作为一种基础的数据结构,相较于数组的优势是不需要预先知道存储数据的大小,但也就无法像数组那样通过下标方便读取。
但是在javascript中本身没有链表,只有数组,但是得益于javascript中数组的一些方法,比如 push pop unshift shift splice
等,使得数组可以方便的模拟链表,并且可以用下标直接访问。
但我们也可以通过一些方法来创建出更接近链表的结构。
单向链表
1 | function Chain(val) { |
以上的结构可以简单模拟单向链表。
比如把数组 ['January', 'February', 'March', 'April']
转换成单向链表。
1 | let array = ['January', 'February', 'March', 'April']; |
循环链表
如果把尾部的next指向头部, 我们就得到了一个循环链表
1 | tail.next = head; |
双向链表
如果我们修改下 Chain
的结构, 增加一个向前的“指针“
1 | function Chain(val) { |
并在创建链表的时候多做一点,将当前节点的“前指针”指向前一个节点,于是就能得到一个双向链表。
1 | let array = ['January', 'February', 'March', 'April']; |
双向循环链表
将双向链表的最后一个节点与第一个节点相连1
2tail.next = head;
head.prev = tail;