# 循环列表

循环链表是指链表的头部和尾部之间存在相互引用，形成了一个循环。

## 单向循环链表

![](https://3490195898-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LnQxDcxCKODvYvTUWe3%2F-Lxe2RP-RcgnvrO6n6FB%2F-Lxe9moRBwFG-13UHysq%2Fimage.png?alt=media\&token=3356b48a-7329-429e-90a6-bbda8280449a)

单向循环链表的实现方法和单向链表几乎一样，但在增加和头部和尾部节点的时候需要注意设置`current.next = this.head`，篇幅所限这里不再累述。

## 双向循环链表

![](https://3490195898-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LnQxDcxCKODvYvTUWe3%2F-Lxe2RP-RcgnvrO6n6FB%2F-Lxe9u1DwSWIcDuiEswZ%2Fimage.png?alt=media\&token=8d08c821-bce3-47d1-8094-bf4ab417e03c)

双向循环链表的实现方法和双向链表也大同小异，这里也不再累述。

链表是 js 中没有原声实现的一种数据结构，相比数组，链表在添加和移除元素的时候效率更高。因此在需要添加和移除大批量元素的时候，最好的选择就是链表。
