#javascript #linked-list
#javascript #связанный список
Вопрос:
Мне нужно реализовать метод addInPos внутри прототипа LinkedList, но я не знаю, что плохого в моем коде … потому что тест не проходит. Реализация метода addInPos внутри прототипа LinkedList, который должен добавить элемент в указанную позицию. Оба данные будут предоставлены в качестве параметра (pos, значение). Где «pos» будет позицией, в которую должно быть добавлено значение «value». В случае, если позиция, в которую должна быть выполнена вставка, является недопустимой, то есть она превышает размер текущего списка, она должна возвращать false . Если узел был добавлен правильно, верните true . Примечание: нулевая позиция соответствует заголовку LinkedList.
Мой код:
LinkedList.prototype.addInPos = function(pos, value) {
if(pos > this.size) {
return false;
}
const newNode = new Node(pos, value);
let current = this.head;
let previous;
if(pos === 0) {
newNode.next = current;
current.prev = newNode;
this.head = newNode;
} else {
for(let i = 0; i < pos; i ){
previous = current;
current = current.next;
}
newNode.next = current;
newNode.prev = previous;
current.prev = newNode;
previous.next = newNode;
}
}
Спасибо.
Ответ №1:
С вашей структурой в идеале функция insertAt будет выглядеть следующим образом:
var insertAt = function(head, item, index) {
var curr = head;
var count = 0;
while (curr !== null) {
if (count === index) {
var newNode = { data: item, next: curr.next, prev: curr };
curr.next = newNode;
break;
}
count ;
curr = curr.next;
}
};
insertAt(head, 2, 3);
Дайте мне знать, если это сработает.
Также посмотрите на этот класс LinkedList, который я создал, функция insertAt в настоящее время отсутствует, но из этого вопроса о стеке я планирую добавить ее и в свой класс.
Класс GitHub
NPM package — @dsinjs/linked-list
Полная документация
Комментарии:
1. Привет, Сиддхеш Кулками, большое спасибо за помощь!
2. @Joha, как же тогда вы не отмечаете этот ответ как принятый?