Files
freeCodeCamp/curriculum/challenges/ukrainian/10-coding-interview-prep/data-structures/add-elements-at-a-specific-index-in-a-linked-list.md

4.8 KiB
Raw Permalink Blame History

id, title, challengeType, forumTopicId, dashedName
id title challengeType forumTopicId dashedName
587d8252367417b2b2512c67 Додавання елементів за конкретним індексом у зв'язаному списку 1 301619 add-elements-at-a-specific-index-in-a-linked-list

--description--

Створімо метод addAt(index,element), який додає елемент за заданим індексом. Як і при видаленні елементів за певним індексом, нам потрібно прослідкувати поточний індекс під час проходження зв'язаного списку. Коли поточний індекс currentIndex відповідає заданому, потрібно перепризначити властивість next попереднього вузла, щоб посилатись на новий доданий вузол. Новий вузол повинен посилатися на наступний вузол з поточним індексом. Як було у прикладі про лінію конга, нова людина хоче приєднатися до лінії, але посередині. Ви знаходитеся посередині лінії, тож ви забираєте руки від людини, що попереду. Нова людина підходить і кладе руки на ту людину, за яку ви тримались раніше; тепер ваші руки знаходяться на новій людині.

--instructions--

Створімо метод addAt(index,element), який додає елемент за заданим індексом. Він повернеться як false, якщо елемент неможливо додати. Примітка: Не забудьте перевірити, чи цей індекс є від'ємним або більшим за довжину зв'язаного списку.

--hints--

Ваш метод addAt повинен перепризначити head на новий вузол, коли заданий індекс дорівнює 0.

assert(
  (function () {
    var test = new LinkedList();
    test.add('cat');
    test.add('dog');
    test.addAt(0, 'fish');
    return test.head().element === 'fish' && test.head().next.element === 'cat';
  })()
);

Ваш метод addAt повинен збільшити довжину зв'язаного списку на одиницю після кожного нового вузла, доданого до цього списку.

assert(
  (function () {
    var test = new LinkedList();
    test.add('cat');
    test.add('dog');
    test.addAt(0, 'cat');
    return test.size() === 3;
  })()
);

Ваш метод addAt повинен повертатися як false, якщо вузол не вдалося додати.

assert(
  (function () {
    var test = new LinkedList();
    test.add('cat');
    test.add('dog');
    return test.addAt(4, 'cat') === false;
  })()
);

--seed--

--seed-contents--

function LinkedList() {
  var length = 0;
  var head = null;

  var Node = function(element) {
    this.element = element;
    this.next = null;
  };

  this.size = function() {
    return length;
  };

  this.head = function() {
    return head;
  };

  this.add = function(element) {
    var node = new Node(element);
    if (head === null) {
      head = node;
    } else {
      var currentNode = head;

      while (currentNode.next) {
        currentNode = currentNode.next;
      }

      currentNode.next = node;
    }
    length++;
  };

  // Only change code below this line

  // Only change code above this line
}

--solutions--

function LinkedList() {
  var length = 0;
  var head = null;

  var Node = function(element){
    this.element = element;
    this.next = null;
  };

  this.size = function(){
    return length;
  };

  this.head = function(){
    return head;
  };

  this.add = function(element){
    var node = new Node(element);
    if (head === null){
        head = node;
    } else {
      var currentNode = head;

      while (currentNode.next) {
        currentNode = currentNode.next;
      }

      currentNode.next = node;
    }
    length++;
  };
  this.addAt = function (index, element) {
    if (index > length || index < 0) {
      return false;
    }
    var newNode = new Node(element);
    var currentNode = head;
    if (index === 0) {
      head = newNode;
    } else {
      var previousNode = null;
      var i = 0;
      while (currentNode && i < index) {
        previousNode = currentNode;
        currentNode = currentNode.next;
        i++;
      }
      previousNode.next = newNode;
    }
    newNode.next = currentNode;
    length++;
  }
}