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() } }