劍指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());