Я реализую функцию удаления для LL в Javascript.Удалить узел из единственного связанного списка
Вот моя функция:
//Define Node obj
function Node(data){
this.data = data;
this.next = null;
}
//Define SinglyList obj
function SinglyList(){
this._length = 0;
this.head = null;
}
SinglyList.prototype.add = function(val){
var node = new Node(val),
currentNode = this.head;
//If empty, build as first node
if(!currentNode){
this.head = node;
this._length++;
return;
}
//iterate over until end of list
while(currentNode.next){
currentNode = currentNode.next;
}
//add/append new node
currentNode.next = node;
this._length++;
return node;
};
SinglyList.prototype.remove = function(index){
var currentNode = this.head, count=0, previous;
//if list is empty, exit out
if(this._length===0) return;
//Check if first node
if(index===0){
this.head = currentNode.next;
this._length--;
}else{
while(count<index){
previous = currentNode;
currentNode = currentNode.next;
count++;
}//end while
previous.next = currentNode.next;
return previous;
}// end if
};
var singlyList = new SinglyList();
singlyList.add(1);
singlyList.add(2);
singlyList.add(3);
singlyList.add(4);
singlyList.add(5);
singlyList.add(6);
singlyList.add(7);
singlyList.add(8);
singlyList.add(9);
singlyList.add(10);
console.log(JSON.stringify(singlyList));
console.log('Remove:\n'+JSON.stringify(singlyList.remove(5)));
Проблема: Если я имел 10 узлов в моем списке и назвал эту функцию, чтобы удалить 5-й узел, эта функция возвращает только четвёртый-10th узлы, где пятый удален. Тем не менее, я ожидаю, что он вернет 1-10, где 5-й будет удален. Что я делаю неправильно и как я могу получить список, в котором удаляется только 5-й узел?
Я сожалею, что я путаю, хотите ли вы удалить элемент с индексом 5 или значение 5, если вы хотите удалить индекс 5, то Dont изменения в то время как кондиционировать мой код будет удалить элемент со значением 5 ... –
Святое дерьмо! Я смотрел на это прошлое 3+ часов. Я все еще не совсем понимаю, и я думаю, что в JS отсутствует что-то фундаментальное: Как я понял, «while loop» был там для итерации и поиска целевого узла, сохраняя ссылку на копию для предыдущего узла. Как только узел будет найден, и цикл будет завершен, мы просто пропустим и укажем на следующий следующий узел. Все это ... я получаю это. Однако, что я не понимаю, нигде в этой операции мы не модифицируем исходный объект, хранящийся в this.head, поэтому зачем возвращать this.head возвращает правильный список? –
Я хотел удалить по индексу –