Повышайте свои навыки работы с JavaScript: как вставлять узлы в связанный список

Вы хотите улучшить свои навыки работы с JavaScript и погрузиться в структуры данных и алгоритмы? Одна из фундаментальных структур данных, которую вам следует освоить, — это связанный список. В этой статье мы рассмотрим различные методы вставки узлов в связанный список с помощью JavaScript. Итак, начнём!

Понимание связанных списков.
Прежде чем мы углубимся в методы вставки, давайте быстро разберемся, что такое связанный список. Проще говоря, связанный список — это набор узлов, где каждый узел содержит значение и ссылку (или ссылку) на следующий узел в списке. Эта структура позволяет динамически распределять память и эффективно вставлять/удалять элементы.

Метод 1. Вставка в начало связанного списка.
Первый метод, который мы рассмотрим, — это вставка узла в начало связанного списка. Это самый простой и быстрый метод вставки. Вот пример фрагмента кода:

class Node {
  constructor(value) {
    this.value = value;
    this.next = null;
  }
}
class LinkedList {
  constructor() {
    this.head = null;
  }
  insertAtHead(value) {
    const newNode = new Node(value);
    newNode.next = this.head;
    this.head = newNode;
  }
}
// Usage
const linkedList = new LinkedList();
linkedList.insertAtHead(10);
linkedList.insertAtHead(20);

Метод 2. Вставка в конец связанного списка.
Следующий метод, который мы рассмотрим, — это вставка узла в конец связанного списка. Этот метод требует обхода всего списка, пока мы не достигнем последнего узла. Вот пример:

class LinkedList {
  //...
  insertAtTail(value) {
    const newNode = new Node(value);

    if (!this.head) {
      this.head = newNode;
      return;
    }

    let currentNode = this.head;
    while (currentNode.next) {
      currentNode = currentNode.next;
    }

    currentNode.next = newNode;
  }
}
// Usage
const linkedList = new LinkedList();
linkedList.insertAtTail(10);
linkedList.insertAtTail(20);

Метод 3: вставка в определенную позицию.
Иногда вам может потребоваться вставить узел в определенную позицию в связанном списке. Для этого нам нужно найти нужную позицию и соответствующим образом настроить ссылки. Вот пример:

class LinkedList {
  //...
  insertAtPosition(position, value) {
    if (position === 0) {
      this.insertAtHead(value);
      return;
    }

    const newNode = new Node(value);
    let count = 0;
    let currentNode = this.head;
    let previousNode = null;

    while (count < position) {
      count++;
      previousNode = currentNode;
      currentNode = currentNode.next;
    }

    previousNode.next = newNode;
    newNode.next = currentNode;
  }
}
// Usage
const linkedList = new LinkedList();
linkedList.insertAtPosition(0, 10);
linkedList.insertAtPosition(1, 20);
linkedList.insertAtPosition(1, 15);

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

class LinkedList {
  //...
  insertAfterNode(node, value) {
    const newNode = new Node(value);
    newNode.next = node.next;
    node.next = newNode;
  }
}
// Usage
const linkedList = new LinkedList();
const nodeA = new Node(10);
const nodeB = new Node(20);
linkedList.head = nodeA;
nodeA.next = nodeB;
linkedList.insertAfterNode(nodeA, 15);

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

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