双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。
特点 :
- 可以用一个head 和一个tail 分别指向头和尾的节点
- 每个节点都由三部分组成:前一个节点的指针(prev)/保存元素(item)/后一个节点的指针(next)
- 双向链表的第一个节点的prev是null
- 双向链表的最后节点的next是null
常用方法:
- append(data) 追加元素
- insert(position, data) 插入节点
- get(position) 查看元素
- indexOf(element) 返回元素在列表中的索引
- updata(position) 修改某个位置的元素
- remove(position/data) 从列表的特定位置(数据)移除一项
- isEmpty() 如果链表中不包含任何元素,返回true,否则为false
- size() 返回链表包含的元素个数,与数组的length类似
// 封装双向链表
function DoublyLinkedList() {
// 封装内部类
function Node (data){
this.data = data;
this.prev = null;
this.next = null;
}
// 属性
this.head = null;
this.tail = null;
this.length = 0;
// 常见方法
// 1 append追加
DoublyLinkedList.prototype.append = function (data) {
var newNode =