开发者学堂课程【Go 语言核心编程 - 数据结构和算法: 数据结构和算法-环形链表创建和显示】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/627/detail/9841
数据结构和算法-环形链表创建和显示
环形列表的结构大概就是这样:
一、完成对单向环形链表的添加结点,删除结点和显示。
首先打开 Visual Stdio Code,新建一个文件夹。写一个 mian.go,新建一个结构体,叫猫猫结构体,假设放一堆小猫进去,猫猫有结构,有编号,示意图如下:
type CatNodestring{
No int
name string
next"CatNode
}
具体操作代码:
package main
import(
“fmt"
)
//定义猫的结构体结点
type CatNode struct {
no int
//猫猫的编号
name string
//猫猫的名字
next*CatNode
}
func InsertCatNode(head *CatNode,newCatNode*CatNode){
往进添加时候必须要有头结点,环形确实没有头结点,但是你必须自己初始化一个头结点,没有头结点什么都做不了,只是这个头结点的维护有点复杂。
//判断是不是添加第一只猫
If head.next==nil{如果现在没有头猫
head. no= newCatNode . no
head, name= newCatNode . name
head. next=head
//构成一个环形
让 next 指向自己,因为是环形的,只是这个里边只有一只猫而已。
一个也可以形成一个环状
里面的指向会影响 head 的指向
第一只猫就加入到了环形
Return
}
//第二只猫要考虑环形的最后
//定义一个临时的变量,帮忙找到环形的最后一个结点
Temp:=head
for{
if temp. next=head }
break
temp=temp. next
}
//加入到链表中
temp.next= newCatNode
newcatNode , next=head
//输出这个环形的链表
func ListcircleLink(head*CatNode){
temp:= head
环形链表的情况如下:
如果它是空链表就没有必要走了
if temp. next ==nil{
fmt.println("空空如也的环形链表…”)
return
}
for
{
fmt. Println("猫的信息为=id=%s]"->”\n", 形成了环状。temp,no,temp.name)
If temp.next==head{
Break
}
如果没有的话
Temp=temp.next
}
}
func main(){
//这里我们初始化一个环形链表的头结点
Head:=&CatNode{}
//创建一只猫
cat1:=&CatNode{
no : 1,
name:"tom",
}
InsertCatNode(head,cat1)
}
这样就形成了一个环状
添加没有问题
环形没有头结点,但是要初始化一个头结点,要想象刚开始这个里边什么都没有,所以要做一个头结点才能开始玩,可以想象这里仍然有一个变量,以前学的头结点里是空的,但是环形链表里必须要放数据,自己执行自己也可以,自己形成一个闭合的环形,现在已经有一个了,要再加一个,有一只猫猫来了,现在的情况就是已经有一个 temp 的结点已经找到了环状的最后,那么现在要做的就是加入到这个团队里。