Метод list.List.InsertBefore

Метод InsertBefore структуры list.List вставляет новый элемент со значением v перед указанным элементом mark. Первым параметром метод принимает значение для вставки, вторым — указатель на элемент, перед которым нужно вставить новый элемент. Метод возвращает вставленный элемент типа *list.Element. Если указанный элемент не принадлежит списку, метод не выполняет операцию и возвращает nil.

Синтаксис

gofunc (l *List) InsertBefore(v interface{}, mark *Element) *Element

Пример

Давайте создадим список из трех элементов и вставим новый элемент перед вторым элементом:

gopackage main

import (
  "container/list"
  "fmt"
)

func main() {
  l := list.New()
  l.PushBack("a")
  mark := l.PushBack("b")
  l.PushBack("c")

  // Вставляем "x" перед "b"
  res := l.InsertBefore("x", mark)

  // Выводим весь список
  for e := l.Front(); e != nil; e = e.Next() {
    fmt.Println(e.Value)
  }
  fmt.Println("Inserted element:", res.Value)
}

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

go"a"
"x"
"b"
"c"
"Inserted element: x"

Пример

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

gopackage main

import (
  "container/list"
  "fmt"
)

func main() {
  l := list.New()
  l.PushBack("a")
  l.PushBack("b")

  // Создаем элемент, не принадлежащий списку
  otherList := list.New()
  mark := otherList.PushBack("x")

  res := l.InsertBefore("z", mark)
  fmt.Println("Result:", res)

  fmt.Println("List length:", l.Len())
  for e := l.Front(); e != nil; e = e.Next() {
    fmt.Println(e.Value)
  }
}

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

go"Result: <nil>"
"List length: 2"
"a"
"b"

Пример

Давайте вставим элемент перед первым элементом списка. Для этого получим первый элемент с помощью метода Front:

gopackage main

import (
  "container/list"
  "fmt"
)

func main() {
  l := list.New()
  l.PushBack("a")
  l.PushBack("b")
  l.PushBack("c")

  // Получаем первый элемент
  first := l.Front()
  res := l.InsertBefore("start", first)

  for e := l.Front(); e != nil; e = e.Next() {
    fmt.Println(e.Value)
  }
  fmt.Println("Inserted element:", res.Value)
}

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

go"start"
"a"
"b"
"c"
"Inserted element: start"

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

  • метод list.List.InsertAfter,
    который вставляет элемент после указанного элемента
  • метод list.List.PushFront,
    который вставляет элемент в начало списка
  • метод list.List.PushBack,
    который вставляет элемент в конец списка
  • метод list.List.Remove,
    который удаляет указанный элемент из списка