Go编写LinkTable库

qq_41932890 2022-04-06 14:32:53

结点和链表定义

// 定义节点
type ListNode struct {
	data interface{}
	next *ListNode
}

// 定义链表
type LinkTable struct {
	length   int
	headNode *ListNode
}

链表初始化和常规操作

// 带有头节点的单链表的初始化
func InitList() *LinkTable {
	node := new(ListNode)
	L := new(LinkTable)
	L.headNode = node
	L.length = 0
	return L
}

// 判断链表是否为空
func (list *LinkTable) IsNull() bool {
	if list.length == 0 {
		return true
	} else {
		return false
	}
}

// 得到链表长度
func (list *LinkTable) GetLength() int {
	return list.length
}

// 遍历链表
func (list *LinkTable) ShowList() {
	if !list.IsNull() {
		cur := list.headNode.next
		for {
			fmt.Printf("%v\t", cur.data)
			if cur.next != nil {
				cur = cur.next
			} else {
				break
			}
		}
		fmt.Printf("\n")
	}
}

查找

// 查找指定值是否存在于链表中
func (list *LinkTable) IsInElem(v interface{}) bool {
	if list.IsNull() {
		fmt.Println("err")
		return false
	} else {
		pre := list.headNode
		for pre != nil {
			if pre.data == v {
				return true
			}
			pre = pre.next
		}
		return false
	}
}

插入

// 单链表头插法
func (list *LinkTable) AddElem(v interface{}) {
	node := &ListNode{data: v}
	node.next = list.headNode.next
	list.headNode.next = node
	list.length++
	return
}

// 单链表尾插法
func (list *LinkTable) AppendElem(v interface{}) {
	node := &ListNode{data: v}
	cur := list.headNode
	for cur.next != nil {
		cur = cur.next
	}
	cur.next = node
	list.length++
	return
}

删除

// 删除指定值结点
func (list *LinkTable) RemoveElem(v interface{}) {
	pre := list.headNode
	for pre.next != nil {
		if pre.next.data == v {
			pre.next = pre.next.next
			list.length--
			return
		} else {
			pre = pre.next
		}
	}
	fmt.Println("fail")
	return
}

测试代码

func main() {
	L := InitList()
	msg := []int{1, 2, 3, 4, 5, 6}
	// 利用尾插法由数组创建链表
	for i := range msg {
		L.AppendElem(msg[i])
	}
	L.ShowList()
	fmt.Println(L.GetLength())
	// 头插法插入结点
	L.AddElem(0)
	L.ShowList()
	// 删除指定结点
	L.RemoveElem(2)
	L.ShowList()
	// 查询结点是否在链表中
	fmt.Println(L.IsInElem(1))
	fmt.Println(L.GetLength())
}

测试结果

代码仓库:EthanTian526/exp2_list (github.com)

作者:408

 

 

...全文
79 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

571

社区成员

发帖
与我相关
我的任务
社区描述
软件工程教学新范式,强化专项技能训练+基于项目的学习PBL。Git仓库:https://gitee.com/mengning997/se
软件工程 高校
社区管理员
  • 码农孟宁
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧