本文源码 这里
和单向链表区别
1.每个节点有两个指针,一个指向上一个节点,一个指向下一个节点2.除过链表头head还多了一链表尾tail属性
双向链表的优点 1.从双向链表中的任意一个结点开始,都可以很方便地访问它的前节点和后节点,单向链表都得从第一个节点开始2.既可以从头遍历,又可以从尾部遍历
双向链表的缺点 1.每次插入删除节点时,需要处理四个引用2.相比较单向链表,存储空间要求更大
封装一个双向链表
function LinkedList() {
// 头结点
this.head = null;
// 链表长度
this.length = 0;
// 尾结点
this.tail = null;
// 节点类
function Node(data) {
// 存储指向上一个节点的指针(应用)
this.prev = null;
// 存储节点包含的数据
this.data = data;
// 存储指向下一个节点的指针(引用)
this.next = null;
}
}
基本方法和单向链表的方法一样
**但需要注意的时,涉及到要操作前后两个节点时,不仅要处理指向下一个节点的指针,还要处理指向上一个节点的指针**
总结
1.遍历链表:通过查看节点的next是否为空来遍历2.查找指定位置节点:通过设置index,然后在遍历时和目标位置对比来查找