Задать вопрос
@sneeeg

Double Linked List, почему функция не отрабаывает и как организовать remove?

Двусвязный список, который может:
  • добавлять элементы в конец списка по индексу и значению,
  • удалять элементы по индексу и значению,
  • искать элемент по индексу и значению.

Link на код
  • Вопрос задан
  • 189 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
На вопрос "почему не отрабатывает" ответ смотрите в консоли - там есть соответствующее сообщение об ошибке.

class DoublyLinkedList {
  constructor() {
    this.size = 0;
    this.head = null;
    this.tail = null;
  }

  add(value, index) {
    index ??= this.size;

    const next = this.searchByIndex(index);
    const prev = next ? next.prev : this.tail;
    const node = { value, next, prev };

    prev || (this.head = node);
    next || (this.tail = node);

    prev && (prev.next = node);
    next && (next.prev = node);

    this.size++;
  }

  _remove(node) {
    if (node) {
      node.prev || (this.head = node.next);
      node.next || (this.tail = node.prev);

      node.prev && (node.prev.next = node.next);
      node.next && (node.next.prev = node.prev);

      this.size--;
    }
  }

  removeByValue(value) {
    this._remove(this.searchByValue(value));
  }

  removeByIndex(index) {
    this._remove(this.searchByIndex(index, true));
  }

  searchByIndex(index, strict) {
    if (!(index >= 0 && index <= this.size - !!strict)) {
      throw 'invalid index';
    }

    let node = this.head;

    while (index--) {
      node = node.next;
    }

    return node;
  }

  searchByValue(value, startIndex = 0) {
    let node = this.searchByIndex(startIndex, true);

    while (node && node.value !== value) {
      node = node.next;
    }

    return node;
  }
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
Rocket Смоленск
от 80 000 до 130 000 ₽
Wanted. Москва
от 250 000 до 400 000 ₽
Wanted. Санкт-Петербург
До 220 000 ₽
21 янв. 2025, в 14:21
30000 руб./за проект
21 янв. 2025, в 14:10
2500 руб./за проект