go实现LinkTable

xiqiniu 2022-07-10 20:01:15

1.代码实现

package main

import "fmt"

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

//定义链表
type LinkTable struct {
	head   *LinkNode
	tail   *LinkNode
	length uint
}

//创建链表
func CreateLinkTable() *LinkTable {
	head := &LinkNode{}
	tail := head
	return &LinkTable{head, tail, 0}
}

//获取链表属性
func (table *LinkTable) getHead() *LinkNode {
	return table.head
}
func (table *LinkTable) getTail() *LinkNode {
	return table.tail
}
func (table *LinkTable) getLength() uint {
	return table.length
}

//插入
//头插法
func (table *LinkTable) insertFromHead(data interface{}) bool {
	node := &LinkNode{}
	node.data = data

	head := table.getHead()
	tail := table.getTail()
	if head == nil {
		return false
	}
	if tail == head {
		table.tail = node
	}
	temp := head.next
	head.next = node
	node.next = temp
	table.length++
	return true
}

//尾插法
func (table *LinkTable) insertFromTail(data interface{}) bool {
	node := &LinkNode{}
	node.data = data
	tail := table.getTail()
	tail.next = node
	table.tail = node
	node.next = nil
	table.length++
	return true
}

//查找节点 index从1开始
func (table *LinkTable) findNode(index int) *LinkNode {
	if index < 0 || index > int(table.length) {
		return nil
	}
	curNode := table.getHead()
	for index > 0 {
		curNode = curNode.next
		index--
	}
	return curNode
}

//刪除节点 index从1开始
func (table *LinkTable) deleteNode(index int) bool {
	node := table.findNode(index)
	if node == nil || node == table.getHead() {
		return false
	}
	preNode := table.findNode(index - 1)
	preNode.next = node.next
	table.length--
	return true
}

//打印链表
func (table *LinkTable) printLinkTable() {
	curNode := table.getHead()
	for curNode != nil {
		fmt.Printf("%v ", curNode.data)
		curNode = curNode.next
	}
	fmt.Printf("\n")
}

//测试
func main() {
	table := CreateLinkTable()
	table.insertFromHead(3)
	table.insertFromHead(2)
	table.insertFromTail(1)
	table.printLinkTable()
	table.deleteNode(1)
	table.printLinkTable()
}

2.上传仓库

作者:281 

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

567

社区成员

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

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