GO写LinkTable库

奖励你们一把亚索108 2022-04-12 10:32:29

1.结构体定义

type LinkNode struct {
	nextNode *LinkNode   //下一个结点
	data     interface{} //放数据
}

type LinkTable struct {
	head   *LinkNode //头结点 不放数据
	length int       //链表长度
}

2.初始化

//创建链表
func CreateLinkTable() *LinkTable {
	newLinkTable := new(LinkTable) //:= 声明并赋值
	firstNode := new(LinkNode)

	newLinkTable.head = firstNode

	newLinkTable.length = 0
	return newLinkTable
}

3.链表方法

//删除链表
func DeleteLinkTable(curLinkTable *LinkTable) {
	for curLinkTable.length != 0 {
		deleteNode := curLinkTable.head.nextNode
		curLinkTable.head.nextNode = curLinkTable.head.nextNode.nextNode
		curLinkTable.length--
		deleteNode.data = nil
		deleteNode.data = nil

	}
}
/插入指定位置
func insertNode(position int, data interface{}, linkTable *LinkTable) *LinkTable {
	if position <= 0 || position > linkTable.length+1 {
		fmt.Println("error insert position")
		return nil
	}
	target := new(LinkNode)
	target.nextNode = nil
	target.data = data
	temp := linkTable.head
	for i := 0; i < position-1; i++ {
		temp = temp.nextNode
	}
	target.nextNode = temp.nextNode
	temp.nextNode = target
	linkTable.length++
	return linkTable
}

// 删除指定位置
func deleteNode(position int, linkTable *LinkTable) *LinkTable {
	if position <= 0 || position > linkTable.length {
		fmt.Println("error insert position")
		return nil
	}
	temp := linkTable.head
	for i := 0; i < position-1; i++ {
		temp = temp.nextNode
	}
	temp.nextNode = temp.nextNode.nextNode
	linkTable.length--

	return linkTable
}

//查找指定位置
func findNode(positon int, linkTable *LinkTable) *LinkNode {
	if positon <= 0 || positon > linkTable.length {
		fmt.Println("error insert position")
		return nil
	}
	temp := linkTable.head
	for i := 0; i < positon; i++ {
		temp = temp.nextNode
	}
	return temp
}

//打印链表
func printTable(linktable *LinkTable) {
	temp := linktable.head.nextNode
	for temp != nil {
		fmt.Print(temp.data, " ")
		temp = temp.nextNode
	}
	fmt.Println("")
}

4.测试

	Table := CreateLinkTable()
	insertNode(1, 3, Table)
	insertNode(1, 2, Table)
	insertNode(1, 1, Table)
	printTable(Table)
	fmt.Println("---------------------")
	deleteNode(3, Table)
	printTable(Table)
	fmt.Println(findNode(2, Table).data)

5.分支合并与同步远程仓库

git add *
git status
git commit - m 'sencond commit'
git push origin main

 

远程仓库链接

作者:108

 

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

571

社区成员

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

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