golang编写LinkTable库

快乐痛苦恼 2022-04-06 16:51:30

1. 定义结点以及链表的数据结构

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

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

2. 初始化链表操作

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

3. 删除链表操作

// 删除链表
func (lt *LinkTable) DeleteLinkTable() bool{
	lt.headNode = nil
	lt.length = 0
	return true
}

4. 判断链表是否为空

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

5. 获取链表长度

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

6. 插入结点操作

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

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

7. 删除指定结点操作

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

源码地址

学号:310

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

571

社区成员

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

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