剑指Offer面试题13:在O(1)时间内删除链表结点(js)实现
题目描述:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。
//链表
function LinkList(){
var Node = function(element) {
this.element = element;
this.next = null;
}
var head = null,
length = 0;
//在尾部插入结点
this.append = function(element) {
var node = new Node(element);
if(head === null) {
head = node;
}else {
var current = head;
while(current.next) {
current = current.next;
}
current.next = node;
}
length ++;
}
//删除节点
this.deleteNode = function(delete_node) {
if(!delete_node) return;
//要删除的结点不是尾结点
if(delete_node.next !== null) {
var pNext = delete_node.next;
delete_node.element = pNext.element;
delete_node.next = pNext.next;
}
//链表只有一个结点,删除头结点
else if(delete_node === head) {
head = null;
}
//删除的是链表的尾结点
else {
var current = head;
while(current.next.next) {
current = current.next;
}
current.next = null;
}
length --;
}
//转化成字符串
this.toString = function(){
var current = head,
str = '';
while(current) {
str = str + current.element + ' ';
current = current.next;
}
return str;
};
}
var list = new LinkList();
list.append(15);
list.append(10);
list.append(8);
list.append(6);
list.append(3);
console.log(list.toString());