IT заметки по программированию
IT заметки по программированию
IT заметки по программированию
IT заметки по программированию

Обратить однонаправленный связный список Golang

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

Реализация функции для обращения списка

Допустим, у нас уже есть структура LinkedList и метод Print, как в предыдущем примере. Мы добавим к этой структуре метод Reverse, который будет обращать порядок узлов в списке.

Вот как это можно реализовать:

Объяснение работы метода Reverse

  1. Инициализация указателей: создаём указатели prev (предыдущий узел) и current (текущий узел). Изначально prev указывает на nil, а current — на голову списка.
  2. Перебор узлов: для каждого узла выполняем:
    • Сохраняем указатель на следующий узел (next).
    • Меняем ссылку next текущего узла на предыдущий узел (prev), тем самым обращая направление.
    • Обновляем prev и current, чтобы перейти к следующему узлу.
  3. Установка новой головы: когда current станет nil, последний обработанный узел (prev) станет новой головой списка.

Пример работы

  1. Исходный список: 1 -> 2 -> 3 -> 4 -> nil.
  2. Обращённый список после вызова Reverse: 4 -> 3 -> 2 -> 1 -> nil.

Этот метод работает за линейное время O(n)O(n), так как мы проходим по каждому узлу один раз.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *