Инвертирование связанного списка в JavaScript: изучение нескольких методов

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

Метод 1: итеративный подход
Итеративный подход предполагает обход связанного списка и изменение указателей для изменения порядка элементов.

function invertLinkedListIterative(head) {
  let prev = null;
  let current = head;
  while (current !== null) {
    let next = current.next;
    current.next = prev;
    prev = current;
    current = next;
  }
  return prev;
}

Метод 2: рекурсивный подход
Рекурсивный подход предполагает рекурсивный обход связанного списка и изменение порядка элементов на обратный.

function invertLinkedListRecursive(head) {
  if (head === null || head.next === null) {
    return head;
  }
  let rest = invertLinkedListRecursive(head.next);
  head.next.next = head;
  head.next = null;
  return rest;
}

Метод 3: стековой подход
Стековой подход предполагает использование структуры данных стека для изменения порядка элементов.

function invertLinkedListStack(head) {
  let stack = [];
  while (head !== null) {
    stack.push(head);
    head = head.next;
  }
  let newHead = stack.pop();
  let current = newHead;
  while (stack.length > 0) {
    current.next = stack.pop();
    current = current.next;
  }
  current.next = null;
  return newHead;
}

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