Реализация метода addInPos внутри прототипа LinkedList в Javascript

#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, как же тогда вы не отмечаете этот ответ как принятый?