双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。
js代码如下:
function DoublyLinkedList() {
var Node = function (element) {
this.element = element;
this.next = null;
this.prev = null;
};
var length = 0;
var head = 0;
var tail = null;
this.insert = function (position, element) {
if (position >= 0 && position <= length) {
var node = new Node(element),
current = head,
previous,
index = 0;
if (position === 0) {
if (!head) {
head = node;
tail = node;
} else {
node.next = current;
current.prev = node;
head = node;
}
}
else if (position === length) {
current = tail;
current.next = node;
node.prev = current;
tail = node;
} else {
while (index++ < position) {
previous = current;
current = current.next;
}
node.next = current;
previous.next = node;
current.prev = node;
node.prev = previous;
}
length++;
return true;
} else {
return false;
}
};
this.removeAt = function (position) {
if (position > -1 && position <= length) {
var current = head,
previous,
index = 0;
if (position === 0) {
head = current.next;
if (length == 1) {
tail = null;
} else {
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;
} else {
return null;
}
};
this.toString = function () {//输出链表中的值
var current = head,
string = '';
while (current) {
string += current.element + " ";
current = current.next;
}
return string;
};
this.getHead=function(){
return head;
}
}
var list=new DoublyLinkedList();
list.insert(0,12);
list.insert(1,23);
list.insert(2,54);
list.insert(3,23);
list.insert(4,2);
console.log(list.toString());
console.log(list.getHead().next);