function BiLinkedList(){
function Node(ele) {
this.element = ele;
this.next = null;
this.prev = null;
}
var length = 0;
var head = null;
var tail = null;
/**
*
* @param pos:指定插入元素的位置
* @param ele:插入的元素
* @return 成功插入:true;失败:false
*/
this.insert = function (pos, ele) {
if(pos > - 1 && pos < length) {
var new_node = new Node(ele);
var current = head, previous = null, index = 0;
if(pos === 0) {
if(!head) {
head = new_node;
tail = new_node;
} else {
new_node.next = current;
current.prev = new_node;
head = new_node;
}
} else if(pos == length) {
current = tail;
current.next = new_node;
new_node.prev = current;
tail = new_node;
} else {
while(index < pos) {
previous = current;
current = current.next;
index++;
}
new_node.next = current;
new_node.prev = previous;
}
length++;
return true;
} else{
return false;
}
}
/**
*
* @param {} pos:指定删除的元素位置
* @return 被删除的元素
*/
this.removeAt = function (pos) {
if(pos > -1 && pos < length) {
var current = head, previous, index = 0;
if(pos === 0) {
head = current.next;
if(length == 1) {
tail = null;
} else {
head.prev = null;
}
} else if(pos === length-1) {
tail = tail.prev;
tail.next = null;
} else {
while(index < pos) {
previous = current;
current = current.next;
index++;
}
previous.next = current.next;
current.next.prev = previous;
}
length--;
return current.element;
} else {
return null;
}
}
/**
* 其他方法...
*/
function size() {
return length;
}
}
module.exports = CircleLinkedList;
JavaScript数据结构与算法(四):双向链表
猜你喜欢
转载自blog.csdn.net/w_bu_neng_ku/article/details/80622967
今日推荐
周排行