Метод ring.Ring.Next

Метод ring.Ring.Next возвращает указатель на следующий элемент в кольцевом списке. При вызове метода на текущем элементе, он перемещается вперед по кольцу и возвращает новый указатель на соседний элемент. Кольцевой список цикличен, поэтому после последнего элемента метод возвращает первый. Метод не принимает никаких параметров.

Синтаксис

gonextRing := r.Next()

Пример

Давайте создадим кольцевой список из трех элементов и получим следующий элемент после первого:

gopackage main

import (
  "container/ring"
  "fmt"
)

func main() {
  r := ring.New(3)

  for i := 0; i < r.Len(); i++ {
    r.Value = i + 1
    r = r.Next()
  }

  current := r.Next()
  fmt.Println(current.Value)
}

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

go2

Пример

Продемонстрируем циклическую природу кольцевого списка, пройдя по нему несколько раз с помощью метода Next:

gopackage main

import (
  "container/ring"
  "fmt"
)

func main() {
  r := ring.New(3)
  r.Value = "a"
  r = r.Next()
  r.Value = "b"
  r = r.Next()
  r.Value = "c"

  r = r.Next()
  fmt.Println(r.Value)
  fmt.Println(r.Next().Value)
  fmt.Println(r.Next().Next().Value)
  fmt.Println(r.Next().Next().Next().Value)
}

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

go"a"
"b"
"c"
"a"

Пример

Используем метод Next для обхода всех элементов кольцевого списка:

gopackage main

import (
  "container/ring"
  "fmt"
)

func main() {
  r := ring.New(4)
  for i := 0; i < r.Len(); i++ {
    r.Value = i + 1
    r = r.Next()
  }

  current := r.Next()
  for i := 0; i < current.Len(); i++ {
    fmt.Println(current.Value)
    current = current.Next()
  }
}

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

go1
2
3
4

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

  • метод ring.Ring.Prev,
    который возвращает предыдущий элемент кольцевого списка
  • метод ring.Ring.Move,
    который перемещает указатель на указанное количество элементов
  • метод ring.Ring.Len,
    который возвращает количество элементов в кольцевом списке
  • метод ring.Ring.Do,
    который применяет функцию ко всем элементам кольцевого списка