go 循环链表

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

 

posted on 2023-07-21 19:33  running-fly  阅读(8)  评论(0编辑  收藏  举报

导航