golang数据结构之循环链表

golang数据结构之循环链表,第1张

概述循环链表还是挺有难度的: 向链表中插入第一条数据的时候如何进行初始化。 删除循环链表中的数据时要考虑多种情况。 详情在代码中一一说明。 目录结构如下: circleLink.go package li

循环链表还是挺有难度的:

向链表中插入第一条数据的时候如何进行初始化。删除循环链表中的数据时要考虑多种情况。

详情在代码中一一说明。

目录结构如下:

circlelink.go

package linkimport (    "fmt")type CatNode struct {    ID   int    name string    next *CatNode}func InserCatNode(head *CatNode,newCatNode *CatNode) {    //初始化链表    头结点一开始是空的,当插入第一条数据时,进行初始化    if head.next == nil {        head.ID = newCatNode.ID        head.name = newCatNode.name        head.next = head        return    }    定义一个临时变量,找到环形的末尾,方便以后进行插入    tmp := head    for {        if tmp.next == head {            tmp.next = newCatNode            newCatNode.next = head            break        } else {            tmp = tmp.next        }    }}func DeleteCatNode(head *CatNode,ID int) *CatNode {    建立一个节点指向头结点    tmp :=如果头结点.next为空,说明是空链表     nil {        fmt.Println(空链表)         head    }    如果头结点.next就是它自己,说明只有一个元素     head {        判断该元素是否是要删除的,如果是,则将头结点置为空        if tmp.ID == ID {            head.next = nil             head        }  {            fmt.Println(要删除的ID不存在)        }    }    奖励一个辅助指针指向头结点    helper :=如果头结点正好是我们要删除的     ID {        fmt.Println(进入1如果头结点.next不是指向它自己,说明除了头结点之外还存在其它节点        if tmp.next != head {            fmt.Println(进入2)            此时若想删除头结点,我们必须获得一个新的头结点            tmp = head.next            将helper遍历到头结点的前一位             {                if helper.next != head {                    helper = helper.next                }  {                    同时删除掉原来的头结点                    fmt.Println(进入3)                    helper.next = head.next                     tmp                }            }        }  {            说明只有一个头结点,且是我们要删除的,直接将其置为空            tmp.next = nil        }        如果头结点不是我们要删除的    } 如果找到一个节点是我们要删除的            if tmp.next.ID == ID {                删除该节点                tmp2 := tmp.next                tmp.next = tmp2.next                break                如果找不到则继续遍历下一个节点            }  {                tmp = tmp.next                如果下一个节点是头结点,则表明完成遍历,找不到要删除的节点,并退出                 head {                    fmt.Println(未找到该条记录)                                    }            }        }    }     head}func ListCatNode(head *CatNode) {    tmp :=空环形链表 {        fmt.Printf(猫的信息为:ID=%d,name=%s\n,tmp.ID,tmp.name)         head {             tmp.next        }    }}

main.go

package mainimport (    "    go_code/data_structure/link)func main() {    head := &link.CatNode{}    cat1 := &link.CatNode{        ID:   1tom2jack3bob4mike------------------------------)    fmt.Println(删除ID=1后的结果是:)    h1 := link.DeleteCatNode(head,)    link.ListCatNode(h1)    fmt.Println(删除ID=4后的结果是:)    h2 := link.DeleteCatNode(h1,1)">)    link.ListCatNode(h2)    fmt.Println(删除ID=3后的结果是:)    h3 := link.DeleteCatNode(h2,1)">)    link.ListCatNode(h3)    fmt.Println(删除ID=2后的结果是:)    h4 := link.DeleteCatNode(h3,1)">)    link.ListCatNode(h4)}

运行结果:

 

 

总结

以上是内存溢出为你收集整理的golang数据结构之循环链表全部内容,希望文章能够帮你解决golang数据结构之循环链表所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1262174.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存