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