47 lines
815 B
Go
47 lines
815 B
Go
|
package main
|
||
|
|
||
|
import "fmt"
|
||
|
|
||
|
type CircularNode struct {
|
||
|
Value int
|
||
|
Next *CircularNode
|
||
|
}
|
||
|
|
||
|
// Кольцевой список
|
||
|
type CircularList struct {
|
||
|
Head *CircularNode
|
||
|
Tail *CircularNode
|
||
|
}
|
||
|
|
||
|
func (cl *CircularList) Add(value int) {
|
||
|
node := &CircularNode{value, nil}
|
||
|
|
||
|
// Для пустого списка
|
||
|
if cl.Head == nil {
|
||
|
cl.Head = node
|
||
|
} else {
|
||
|
cl.Tail.Next = node
|
||
|
}
|
||
|
|
||
|
cl.Tail = node
|
||
|
cl.Tail.Next = cl.Head // Ссылка на первый элемент для формирования кольца
|
||
|
}
|
||
|
|
||
|
func (cl *CircularList) Print() {
|
||
|
if cl.Head != nil {
|
||
|
node := cl.Head
|
||
|
|
||
|
for {
|
||
|
fmt.Print(node.Value, " ")
|
||
|
node = node.Next
|
||
|
|
||
|
// Цикл прекращается после прохода по всему кольцу
|
||
|
if node == cl.Head {
|
||
|
break
|
||
|
}
|
||
|
}
|
||
|
|
||
|
fmt.Println()
|
||
|
}
|
||
|
}
|