Метод ring.Ring.Next
Метод ring.Ring.Next возвращает указатель на следующий элемент в кольцевом списке.
При вызове метода на текущем элементе, он перемещается вперед по кольцу и возвращает новый
указатель на соседний элемент. Кольцевой список цикличен, поэтому после последнего
элемента метод возвращает первый. Метод не принимает никаких параметров.
Синтаксис
nextRing := r.Next()
Пример
Давайте создадим кольцевой список из трех элементов и получим следующий элемент после первого:
package 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)
}
Результат выполнения кода:
2
Пример
Продемонстрируем циклическую природу кольцевого списка, пройдя по нему несколько раз
с помощью метода Next:
package 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)
}
Результат выполнения кода:
"a"
"b"
"c"
"a"
Пример
Используем метод Next для обхода всех элементов кольцевого списка:
package 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()
}
}
Результат выполнения кода:
1
2
3
4
Смотрите также
-
метод
ring.Ring.Prev,
который возвращает предыдущий элемент кольцевого списка -
метод
ring.Ring.Move,
который перемещает указатель на указанное количество элементов -
метод
ring.Ring.Len,
который возвращает количество элементов в кольцевом списке -
метод
ring.Ring.Do,
который применяет функцию ко всем элементам кольцевого списка