566
社区成员
发帖
与我相关
我的任务
分享
具体内容:定义 linktable 的数据结构、定义并实现相应的接口(初始化、插入节点、删除节点、查找)。
最后上传到远程库中。
// 定义为单向链表
type Node struct {
data int
Next *Node
}
type LinkTable struct {
// 链表长度
lenth int
head *Node
tail *Node
}
// 构造初始化
func initLinkTable() *LinkTable {
// 初始化为带头节点的链表
var pTable *LinkTable = new(LinkTable)
if pTable == nil {
return nil
}
var pNode *Node = new(Node)
pNode.next = nil
pTable.lenth = 0
// 首尾指针初始时均指向头节点
pTable.head = pNode
pTable.tail = pNode
return pTable
}
// 在尾部增加节点
func pushBack(pTable *Table, key int) int {
// 链表和节点不能为空指针
if pTable == nil || pNode == nil {
return -1
}
temp := new(Node)
temp.data = key
pTable.tail.next = temp
pTable.tail = temp
temp.next = nil
pTable.lenth++
return 0
}
// 按给定的值查找结点
func findKey(pTable *Table, key int) *Node {
// 链表长度为 0 或表指针为空,返回 nil
if pTable == nil || pTable.lenth == 0 {
return nil
}
var p *Node = pTable.head
for p != nil {
if p.data == key {
return p
}
p = p.next
}
// 未找到则返回 nil
return nil
}
// 按给定值删除节点,返回删除节点的个数
func delete(pTable *Table, key int) int {
// 表长度为 0 或 表指针为 nil
if pTable == nil || pTable.lenth == 0 {
return 0
}
count := 0
pre := pTable.head
p := pre.next
for p != nil {
// 删除所有 data == key 的结点
if p.data == key {
pre.next = p.next
p = p.next
pTable.lenth--
count++
continue
}
pre = p
p = p.next
}
return count
}
// 取第一个结点
func getHead(pTable *LinkTable) *Node {
// 表长度要大于0
if pTable == nil && pTable.lenth > 0 {
return nil
}
return pTable.head
}
// 取最后一个结点
func getTail(pLinkTable *LinkTable) *Node {
// 表长度要大于0
if pLinkTable == nil && pLinkTable.lenth > 0 {
return nil
}
return pLinkTable.tail
}
Gitee 库链接:sheldon-z/menu
作者:615