Метод ring.Ring.Move
Метод ring.Ring.Move перемещает текущий указатель
кольцевого списка на n позиций. В качестве
единственного параметра он принимает целое число
n — количество шагов для перемещения.
Метод возвращает элемент *Ring, на который
указывает указатель после перемещения. Если
n положительное, перемещение происходит
вперед (по направлению метода Next), если
отрицательное — назад (по направлению метода
Prev).
Синтаксис
r.Move(n int) *Ring
Пример
Давайте создадим кольцевой список из пяти элементов и переместим указатель на две позиции вперед:
package main
import (
"container/ring"
"fmt"
)
func main() {
r := ring.New(5)
for i := 0; i < r.Len(); i++ {
r.Value = i + 1
r = r.Next()
}
// Начинаем с первого элемента
r = r.Move(0)
fmt.Println("Current:", r.Value)
// Перемещаемся на 2 элемента вперед
r = r.Move(2)
fmt.Println("After move +2:", r.Value)
}
Результат выполнения кода:
"Current: 1"
"After move +2: 3"
Пример
Теперь переместим указатель на три позиции назад от текущего элемента:
package main
import (
"container/ring"
"fmt"
)
func main() {
r := ring.New(5)
for i := 0; i < r.Len(); i++ {
r.Value = i + 1
r = r.Next()
}
// Начинаем с элемента со значением 3
r = r.Move(2)
fmt.Println("Start at:", r.Value)
// Перемещаемся на 3 элемента назад
r = r.Move(-3)
fmt.Println("After move -3:", r.Value)
}
Результат выполнения кода:
"Start at: 3"
"After move -3: 5"
Пример
Метод Move корректно обрабатывает перемещение
на количество шагов, превышающее длину списка.
В этом случае перемещение происходит по модулю
длины кольца:
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()
}
// Начинаем с первого элемента
r = r.Move(0)
fmt.Println("Start:", r.Value)
// Перемещаемся на 5 шагов вперед (эквивалентно +2)
r = r.Move(5)
fmt.Println("Move +5 (mod 3):", r.Value)
}
Результат выполнения кода:
"Start: 1"
"Move +5 (mod 3): 3"
Смотрите также
-
метод
ring.Ring.Next,
который возвращает следующий элемент кольцевого списка -
метод
ring.Ring.Prev,
который возвращает предыдущий элемент кольцевого списка -
метод
ring.Ring.Link,
который соединяет два кольцевых списка -
метод
ring.Ring.Unlink,
который удаляет элементы из кольцевого списка