← Назад

Односвязный список

Односвязный список - это структура данных, состоящая из узлов (или, как их еще называют — нод). Каждая нода состоит из 2х полей:

  • Значение
  • Указатель

Значение - это некоторые данные, которые мы обычно храним в различных типах, как: int, float, bool и тд. Указатель - это ссылка на следующий элемент списка (иначе как по нему итерироваться?). А последний узел указывает на nil.

У списка есть голова (head) и хвост (tail). Голова указывает на 1-ый элемент в списке, а хвост — на самый последний. Итерироваться по списку можно в одном направлении — от головы к хвосту¹.

Пример с визуализацией:

code
[1] → [2] → [3] → nil
  ⤷ head      ⤷ tail

Как хранятся в памяти?

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

Реализация

Рассмотрим простой пример реализации односвязного списка (без поля Tail). Нам понадобятся 2 структуры:

go
...

И напишем функцию, которая будет работать за О(n) и возвращать искомое² значение:

go
...

В этом примере для итерации я использовал следующий цикл:

go
for i := 0; i < l.count; i++ {}

Вы также можете использовать и другой способ (так обычно и принято писать):

go
for curr.Next != nil {}

Т.к. мы 100% будем знать, что хвост нашего списка указывает на nil, то итерируемся, пока ссылка у узла не будет указывать на nil.


¹ есть циклические односвязные списки, где tail указывает на 1-ый элемент списка, поэтому, по такому списку можно итерироваться сколько угодно (бесконечный цикл).

² значение, которое необходимо найти, называют искомым.

Похожие статьи

Циклический односвязный список

Ранее я подробно объяснил что такое односвязный список. Сейчас же поговорим про односвязный циклический список.

07.04.2026 · 2 мин

Quick Sort: быстрая сортировка

Сортировка — одна из базовых задач в программировании. Упорядоченные данные легче искать, сравнивать и обрабатывать. За десятилетия придумали десятки алгоритмов сортировки. У каждого свои сильные и слабые стороны. Сегодня рассмотрим Quick Sort,

09.04.2026 · 3 мин

Бинарный поиск | Алгоритмы

Рассмотрим на практике как работает бинарный поиск.

07.04.2026 · 2 мин

Каналы в Go

Канал (channel) — это типизированная очередь, через которую горутины могут безопасно передавать данные.

07.04.2026 · 2 мин

Комментарии

0

Ты: ...

Пока нет комментариев. Будь первым.