ВВЕДЕНИЕ

Связный список — это фундаментальная структура данных в информатике, позволяющая хранить данные в линейном, последовательном формате. В отличие от массивов, связанные списки предлагают преимущества несмежного распределения памяти, что приводит к повышенной гибкости и эффективности в определенных сценариях.

В этой статье будет подробно рассмотрена реализация связанных списков в JavaScript. Он будет включать в себя создание узлов, вставку и удаление элементов и обход списка.

Итак, приступим.

ЧАСТЬ СВЯЗАННОГО СПИСКА: УЗЕЛ

Связанный список состоит из узлов, каждый из которых состоит из двух частей — данных и ссылки на следующий узел в списке. В JavaScript узел может быть представлен классом с двумя свойствами:

class Node {
  constructor(data) {
    this.data = data;
    this.next = null;
  }
}

Реализация использует свойство data для хранения значения узла, а свойство next содержит ссылку на следующий узел в списке. Если следующего узла нет, свойство next по умолчанию имеет значение null, чтобы указать конец списка.

СОЗДАНИЕ СВЯЗАННОГО СПИСКА

Создание связанного списка включает в себя отслеживание первого узла в списке, известного как головной узел. Когда список пуст, головной узел по умолчанию имеет значение null. Для этого мы можем создать класс LinkedList со свойством head и методами для вставки и удаления узлов.

class LinkedList {
  constructor() {
    this.head = null;
  } 
 // Other methods go here 
}

ВСТАВКА УЗЛА В СВЯЗАННЫЙ СПИСОК

В этой конкретной реализации метод вставки создает новый узел, используя предоставленные данные, и вставляет его в конец списка. Когда список пуст, новый узел становится головным узлом. С другой стороны, если в списке есть узлы, метод проходит по списку до тех пор, пока не будет достигнут последний узел, а затем обновляет свое свойство next, чтобы оно указывало на новый узел.

  // Insert a new node at the end of the list
  insert(data) {
    const newNode = new Node(data);
    
    if (!this.head) {
      this.head = newNode;
      return;
    }
    
    let current = this.head;
    
    while (current.next) {
      current = current.next;
    }
    
    current.next = newNode;
  }

УДАЛЕНИЕ УЗЛА ИЗ СВЯЗАННОГО СПИСКА

Метод удаления удаляет первый узел в списке, который соответствует заданным данным. В случае, если список пуст или головной узел содержит данные, мы модифицируем головной узел. Однако, если список содержит узлы, метод перемещается по списку до тех пор, пока не будет найден узел с данными, и настраивает следующее свойство предыдущего узла, чтобы обойти узел, который необходимо удалить.

  // Delete the first node with the given data
  delete(data) {
    if (!this.head) {
      return;
    }
    // If the head node contains the data, update the head node
    if (this.head.data === data) {
      this.head = this.head.next;
      return;
    }
    
    let current = this.head;
    // Traverse the list until the node with the data is found
    while (current.next) {
      if (current.next.data === data) {
        current.next = current.next.next;
        return;
      }
      
      current = current.next;
    }
  }

ПЕРЕХОД ПО СВЯЗАННОМУ СПИСКУ

Обход связанного списка включает в себя запуск с головного узла и переход по следующим указателям до тех пор, пока не будет достигнут конец списка. Мы можем создать метод обхода в классе LinkedList для отображения данных каждого узла.

  traverse() {
    let current = this.head;
    
    while (current) {
      console.log(current.data);
      current = current.next;
    }
  }

В этой конкретной реализации метод обхода начинается с печати данных головного узла. После этого текущая переменная присваивается следующему узлу, и этот процесс повторяется до тех пор, пока не будет достигнут конец списка.

ЗАКЛЮЧЕНИЕ

В этой статье рассматриваются основы реализации связанного списка в JavaScript, включая создание класса Node для отображения узла в списке и реализацию методов для вставки, удаления и обхода узлов.

Наконец, вот статья с моего веб-сайта, в которой объясняется, как инвертировать связанный список. Вы можете проверить это, если вам интересно.