使用Go建立Linktable库,并上传至github

怎么老是你 2022-04-06 14:12:47

建立Linktable库

定义节点和链表结构体:

type ListNode struct {
    Val interface{}
    next *ListNode
    lst *SingleList
}

type SingleList struct {
	head *ListNode
	len int
}

建立和初始化链表 

//单链表初始化
func (lst *SingleList)Init(){
	lst.head = new(ListNode)
	lst.head.lst = lst
	lst.len = 0
}

//创建单链表
func New() *SingleList {
	lst := new(SingleList)
	lst.Init()
	return lst
}

清空链表

//清空链表
func (lst *SingleList)Clear(){
	lst.Init()
}

查找

//返回第一个结点
func (lst *SingleList)Front() *ListNode {
	return lst.head.Next()
}

//返回尾结点
func (lst *SingleList)Back() *ListNode {
	if lst.len == 0{
		return nil
	}
	cur := lst.head.Next()
	for{
		if cur.Next() == nil{
			return cur
		}
		cur = cur.Next()
	}
}

插入

//插入
func (lst *SingleList)insert(e, at *ListNode) *ListNode{
	lst.len++
	e.next = at.next
	at.next = e
	e.lst = lst
	return e
}

//指定元素后插
func (lst *SingleList)InsertAfter(val interface{}, mark *ListNode) *ListNode {
	if mark == nil{
		return nil
	}
	if mark.lst == lst{
		return lst.insert(&ListNode{Val:val},mark)
	}
	return nil
}

//尾插
func (lst *SingleList)PushBack(val interface{}) *ListNode{
	end := lst.Back()
	if end == nil{
		return lst.InsertAfter(val,lst.head)
	}else {
		return lst.InsertAfter(val,end)
	}
}

//头插
func (lst *SingleList)PushFront(val interface{}) *ListNode {
	return lst.InsertAfter(val,lst.head)
}

删除

//删除
func (lst *SingleList)remove(e *ListNode) *ListNode{
	nextOne := e.next
	if nextOne == nil{
		return nil
	}
	lst.len--
	e.next = e.next.next
	nextOne.lst = nil
	return nextOne
}

遍历

//遍历
func (lst *SingleList)ShowList()  {
	for cur := lst.Front();cur!=nil;cur = cur.Next(){
		fmt.Print(cur.Val," ")
		cur = cur.Next()
	}
	fmt.Println()
}

长度

//单链表长度
func (lst *SingleList)Len() int {
	return lst.len
}

上传github

git add.

git commit -m "commit说明" 

git push -u origin main

上传成功

链接:https://github.com/hoay123/menu

心得体会

作为go新手,第一次使用go写了一个完整的库,体会到了go语言本身的便利性

第二次上传github,比第一次熟练很多

链表虽然逻辑简单,但是写代码要考虑的情况比较多,需要仔细考虑

学号:413

 

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

571

社区成员

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

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