РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
916 of 1593 menu

Тип list.List

Тип list.List из пакета container/list представляет собой реализацию двусвязного списка. Он хранит элементы в виде узлов типа list.Element, каждый из которых содержит значение, а также ссылки на предыдущий и следующий элементы. Основное преимущество этой структуры — возможность вставки и удаления элементов за константное время O(1) в любом месте списка, если у вас есть ссылка на соответствующий элемент. Однако доступ к элементу по индексу требует линейного времени O(n), так как список не является массивом.

Тип list.List не имеет методов для прямого доступа по индексу, поэтому для перебора всех элементов необходимо использовать методы получения первого и последнего элемента, а затем переходить по ссылкам. Это делает его идеальным для реализации очередей, стеков, кэшей с политикой LRU (least recently used) и других структур данных, где часто выполняются вставки и удаления.

Для создания нового списка используется функция list.New, которая возвращает инициализированный пустой список. Инициализация также может быть выполнена с помощью метода Init, который очищает список и подготавливает его к использованию.

Синтаксис

import "container/list" // Создание нового списка l := list.New() // Добавление элемента в конец e := l.PushBack(10) // Вставка элемента перед указанным l.InsertBefore(5, e) // Удаление элемента l.Remove(e) // Получение длины списка length := l.Len()

Пример

Давайте создадим новый список, добавим в него несколько элементов и выведем длину и содержимое:

package main import ( "container/list" "fmt" ) func main() { l := list.New() l.PushBack("a") l.PushBack("b") l.PushBack("c") fmt.Println("Length:", l.Len()) // Перебор элементов for e := l.Front(); e != nil; e = e.Next() { fmt.Println(e.Value) } }

Результат выполнения кода:

"Length: 3" "a" "b" "c"

Пример

Теперь давайте вставим элемент в середину списка с помощью метода InsertAfter:

package main import ( "container/list" "fmt" ) func main() { l := list.New() e1 := l.PushBack("a") e2 := l.PushBack("c") // Вставляем "b" после первого элемента l.InsertAfter("b", e1) for e := l.Front(); e != nil; e = e.Next() { fmt.Println(e.Value) } }

Результат выполнения кода:

"a" "b" "c"

Пример

Удалим элемент из середины списка, используя метод Remove. Метод возвращает значение удаленного элемента:

package main import ( "container/list" "fmt" ) func main() { l := list.New() e1 := l.PushBack("a") e2 := l.PushBack("b") l.PushBack("c") removed := l.Remove(e2) fmt.Println("Removed:", removed) for e := l.Front(); e != nil; e = e.Next() { fmt.Println(e.Value) } }

Результат выполнения кода:

"Removed: b" "a" "c"

Смотрите также

  • функцию list.New,
    которая создает новый двусвязный список
  • метод PushBack,
    который добавляет элемент в конец списка
  • метод PushFront,
    который добавляет элемент в начало списка
  • метод InsertAfter,
    который вставляет элемент после указанного
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить