@sneeeg

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

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

Link на код
  • Вопрос задан
  • 189 просмотров
Решения вопроса 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;
  }
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
23 нояб. 2024, в 01:31
1000 руб./за проект
23 нояб. 2024, в 00:16
2000 руб./за проект
22 нояб. 2024, в 23:55
3000 руб./за проект