Ex_GoAlgorithms/circularLinkedList.go

47 lines
815 B
Go
Raw Permalink Normal View History

2024-05-30 11:50:30 +04:00
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()
}
}