Golang循环链表

代码如下:

package main

import (
"fmt"
)

//节点
type CatNode struct{
id int
name string
next *CatNode
}

//循环链表
type CircleLink struct{
head *CatNode
}
//插入
func (circleLink *CircleLink)Insert(newCatNode *CatNode){
//如果链表为空
if circleLink.head==nil{
circleLink.head=newCatNode
circleLink.head.next=newCatNode
return
}

temp:=circleLink.head
//找到队列尾部
for{
if temp.next==circleLink.head{
break
}
temp=temp.next
}
//插入
temp.next=newCatNode
newCatNode.next=circleLink.head
}

//输入链表
func (circleLink *CircleLink)List(){
temp:=circleLink.head
//如果链表为空
if temp==nil{
fmt.Println("null")
return
}
//遍历输出链表
for{
fmt.Println(temp.id,temp.name)
if temp.next==circleLink.head{
break
}
temp=temp.next
}
fmt.Println("====================")
}


func (circleLink *CircleLink)remove(no int)*CatNode{
temp:=circleLink.head
//如果链表为空
if temp==nil{
return nil
}
//如果链表只有一个值,自己指向自己
if temp.next==circleLink.head{
circleLink.head=nil
return nil
}
//找到要删除节点的前一个值,找不到head为最后一个节点
for{
if temp.next.id==no||temp.next==circleLink.head{
break
}
temp=temp.next
}

if circleLink.head.id==no{//如果被删除的节点是head
circleLink.head=circleLink.head.next
}else if temp.next==circleLink.head {//如果没有找到
return nil
}
//删除节点
tempNext:=temp.next
temp.next=temp.next.next
return tempNext
}

func main() {
//创建链表
link:=new(CircleLink)

cat1:=&CatNode{
id:1,
name:"tom",
}
cat2:=&CatNode{
id:2,
name:"sam",
}

cat3:=&CatNode{
id:3,
name:"peny",
}
cat4:=&CatNode{
id:4,
name:"jack",
}
link.Insert(cat1)
link.Insert(cat2)
link.Insert(cat3)
link.Insert(cat4)
link.List()
a:=link.remove(1)
fmt.Println(a)
link.remove(4)
link.List()
link.remove(30)
link.List()
link.remove(2)
link.remove(3)
link.remove(3)
link.List()
}
 

猜你喜欢

转载自www.cnblogs.com/blog1598558660/p/12458038.html