package main
import (
"fmt"
"log"
)
//链表元素
type Element interface {
}
//链表
type Node struct {
Data Element
Next *Node
}
//头节点
type List struct {
HeaderNode *Node
}
//判断链表是否为空
func (this *List) IsEmpty() bool {
if this.HeaderNode != nil {
return true
} else {
return false
}
}
//获取链表长度
func (this *List) GetLength() int {
cur := this.HeaderNode
count := 0
for cur != nil {
count++
cur = cur.Next
}
return count
}
//获取头部节点
func (this *List) GetHeadNode() *Node {
return this.HeaderNode
}
//从头部添加元素
func (this *List) Add(Elm Element) {
node := &Node{Data: Elm}
node.Next = this.HeaderNode
this.HeaderNode = node
}
//从尾部添加元素
func (this *List) Append(Elm Element) {
node := &Node{Data: Elm}
if this.GetLength() < 0 {
this.HeaderNode = node
} else {
cour := this.HeaderNode
for cour.Next != nil {
cour = cour.Next
}
cour.Next = node
}
}
//指定位置添加元素
func (this *List) Insert(index int, Elm Element) {
if index < 0 {
this.Add(Elm)
} else if index > this.GetLength() {
this.Append(Elm)
} else {
pre := this.HeaderNode
count := 0
for count < (index - 1) {
pre = pre.Next
count++
}
node := &Node{Data: Elm}
node.Next = pre.Next
pre.Next = node
}
}
//删除指定元素
func (this *List) Remove(Elm Element) {
pre := this.HeaderNode
if pre.Data == Elm {
this.HeaderNode = pre.Next
} else {
for pre.Next != nil {
if pre.Next.Data == Elm {
pre.Next = pre.Next.Next
} else {
pre = pre.Next
}
}
}
}
//删除指定位置的元素
func (this *List) RemoveIndex(index int) {
pre := this.HeaderNode
if index <= 0 {
this.HeaderNode = pre.Next
} else if index > this.GetLength() {
log.Fatal("Index is Out of range")
} else {
count := 0
for count < (index-1) && pre != nil {
count++
pre = pre.Next
}
pre.Next = pre.Next.Next
}
}
//是否包含某个元素
func (this *List) Contain(Elm Element) bool {
pre := this.HeaderNode
for pre != nil {
if pre.Data == Elm {
return true
}
pre = pre.Next
}
return false
}
//循环元素
func (this *List) Traverse() {
pre := this.HeaderNode
for pre != nil {
fmt.Println(pre.Data)
pre = pre.Next
}
}
func main() {
this := new(List)
this.Add("AA")
this.Append("CC")
this.Insert(1, "BB")
this.Remove("BB")
this.RemoveIndex(1)
boo1 := this.Contain("AA1")
boo := this.IsEmpty()
len := this.GetLength()
this.Traverse()
fmt.Println(boo1)
fmt.Println(boo)
fmt.Println(len)
}
goalng实现单链表相关操作
最新推荐文章于 2021-12-31 17:31:46 发布