package main
import (
"fmt"
)
type Node struct{
Data int
Next *Node
}
type CircularLinkedList struct {
Head *Node
Tail *Node
}
func NewCircularLinkedList()*CircularLinkedList{
return &CircularLinkedList{}
}
func (l *CircularLinkedList)AddNode(num int){
node := &Node{
Data:num,
}
if l.Head==nil{
l.Head = node
l.Tail = node
l.Tail.Next = l.Head
return
}
l.Tail.Next = node
node.Next = l.Head
l.Tail = node
}
func(l *CircularLinkedList)DeleteNode(num int){
//如果删除的数字和头结点相等
if l.Head.Data==num{
fmt.Println(111)
l.Head = l.Head.Next
l.Tail.Next = l.Head
return
}
fmt.Println(2111)
current := l.Head
for current.Next!=l.Head{
if current.Data==num{
current.Next = current.Next.Next
return
}
current = current.Next
}
}
func (list *CircularLinkedList) show() {
if list.Head == nil {
return
}
current := list.Head
for current.Next != list.Head {
fmt.Printf("%d ", current.Data)
current = current.Next
}
fmt.Printf("%d\n", current.Data)
}
func main(){
list:=NewCircularLinkedList()
list.AddNode(1)
list.AddNode(28)
list.AddNode(4)
list.show()
list.DeleteNode(1)
list.show()
}