Метод ring.Ring.Prev
Метод ring.Ring.Prev возвращает указатель на предыдущий
элемент кольцевого списка. Он не изменяет текущую позицию
в кольце, а только возвращает ссылку на соседний элемент.
Если кольцо пустое или содержит один элемент, метод вернет
указатель на тот же самый элемент.
Синтаксис
ring.Prev() *Ring
Пример
Давайте создадим кольцо из пяти элементов и перейдем к предыдущему элементу от текущего:
package main
import (
"container/ring"
"fmt"
)
func main() {
r := ring.New(5)
for i := 0; i < r.Len(); i++ {
r.Value = i
r = r.Next()
}
current := r
prev := current.Prev()
fmt.Printf("Current: %v, Previous: %v\n", current.Value, prev.Value)
}
Результат выполнения кода:
"Current: 0, Previous: 4"
Пример
Давайте пройдем по всем элементам кольца в обратном порядке,
используя метод Prev:
package main
import (
"container/ring"
"fmt"
)
func main() {
r := ring.New(5)
for i := 0; i < r.Len(); i++ {
r.Value = i
r = r.Next()
}
start := r
for i := 0; i < r.Len(); i++ {
fmt.Printf("%d ", r.Value)
r = r.Prev()
}
fmt.Println()
}
Результат выполнения кода:
"0 4 3 2 1 "
Пример
Давайте покажем, что метод Prev не изменяет
текущий элемент, а только возвращает ссылку на предыдущий:
package main
import (
"container/ring"
"fmt"
)
func main() {
r := ring.New(3)
for i := 0; i < r.Len(); i++ {
r.Value = i
r = r.Next()
}
current := r
prev := current.Prev()
fmt.Printf("Before - Current: %v, Previous: %v\n", current.Value, prev.Value)
prev.Value = 99
fmt.Printf("After - Current: %v, Previous: %v\n", current.Value, prev.Value)
}
Результат выполнения кода:
"Before - Current: 0, Previous: 2"
"After - Current: 0, Previous: 99"
Смотрите также
-
метод
ring.Ring.Next,
который возвращает следующий элемент кольцевого списка -
метод
ring.Ring.Move,
который перемещается на указанное количество элементов -
метод
ring.Ring.Link,
который связывает два кольца в одно -
метод
ring.Ring.Len,
который возвращает количество элементов в кольце