title: JavaScript实现双向链表

toc: false

date: 2018-10-07 10:11:36


  • append(element): 添加元素到链表尾部
  • insert(position,element): 向双向链表中某个位置插入元素
  • removeAt(position): 移除双向链表中某个位置的元素

  • getHead(): 获取双向链表的头部
  • getTail(): 获取双向链表的尾部
  • isEmpty(): 检查双向链表是否为空,为空则返回true
  • size(): 返回双向链表长度
   function DoublyLinkedList() {
var Node = function (element) {
this.element = element;
this.next = null;
this.prev = null;
} var length = 0;
var head = null;
var tail = null; this.append = function (element) {
var node = new Node(element); if (head === null) {
head = node
tail = node
} else {
tail.next = node;
node.prev = tail;
tail = node;
}
length++;
return true;
} /**
* 向双向链表中某个位置插入元素
*
* @param {any} position 要插入的位置
* @param {any} element 要插入的元素
* @returns 插入成功或失败
*/
this.insert = function (position, element) {
var node = new Node(element),
current = head,
previous,
index = 0; if (position < 0 && position > length) {
return false;
} if (position === 0) {
node.next = head
head.prev = node
head = node
} else if (position === length) {
tail.next = node;
node.prev = tail;
tail = node;
} else {
while (index++ < position) {
previous = current
current = current.next;
}
previous.next = node;
node.prev = previous;
node.next = current;
current.prev = node;
}
length++;
return true;
} /**
* 移除双向链表中某个位置的元素
*
* @param {any} position 要移除元素的位置
* @returns 移除成功,返回移除的元素
*/
this.removeAt = function (position) {
var previous,
current = head,
index = 0;
if (position < 0 && position >= length) {
return false;
} if (position === 0) {
head = current.next;
head.prev = null;
} else if(position === length - 1) {
current = tail;
tail = current.prev;
tail.next = null;
} else {
while (index++ < position) {
previous = current
current = current.next;
}
previous.next = current.next;
current.next.prev = previous;
}
length--;
return current.element;
} this.getHead = function () {
return head.element;
} this.isEmpty = function () {
return length === 0
} this.getTail = function () {
return tail.element;
} this.size = function () {
return length
}
}

最新文章

  1. 学习css中得与惑
  2. [转载] select, poll和epoll的区别
  3. JSP之Cookie
  4. PHP提高编程效率的方法,你知道多少呢?
  5. CATransform3D 讲解
  6. 重读The C programming Lanuage 笔记一:类型转换
  7. Ubuntu 14.04 使用MyEclipse 10.7 闪退解决
  8. win7与centos虚拟机的共享文件夹创建
  9. CodeForces - 551C 二分+贪心
  10. CentOS 7安装Python3.6过程(让linux系统共存Python2和Python3环境)
  11. .net core下使用FastHttpApi构建web聊天室
  12. Android文件各种存储路径的比较
  13. 修改oracle数据库允许连接的数
  14. qt ShaderEffect上的ShaderToy
  15. 高性能mysql 第六章查询性能优化 总结(上)查询的执行过程
  16. LeetCode 590 N-ary Tree Postorder Traversal 解题报告
  17. JAVA 连接 SQL Server 2008:java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver
  18. 同步IO和异步IO的区别
  19. (资源)OpenStack IRC资源
  20. D10——C语言基础学PYTHON

热门文章

  1. 迭代Iterator的用法
  2. Django后台创建
  3. js 判断设备的来源
  4. 基于 Web 的 Go 语言 IDE - Wide 1.3.0 发布!
  5. android UI卡顿问题学习
  6. iOS开发者账号证书配置及相关工作
  7. pgpool如何对数据库节点进行状态检查及相关数据结构描述
  8. svn: E155017: Checksum mismatch while updating 校验错误的解决方法
  9. java文件名与class关系
  10. 堆————数据流的第k个大的元素