567
社区成员
![](https://csdnimg.cn/release/cmsfe/public/img/topic.427195d5.png)
![](https://csdnimg.cn/release/cmsfe/public/img/me.40a70ab0.png)
![](https://csdnimg.cn/release/cmsfe/public/img/task.87b52881.png)
![](https://csdnimg.cn/release/cmsfe/public/img/share-circle.3e0b7822.png)
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