# 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.上传仓库

...全文
71 回复 打赏 收藏 转发到动态 举报

566

• 近7日
• 近30日
• 至今