571
社区成员
发帖
与我相关
我的任务
分享分别定义了节点和链表类型
// 定义数据结构
type Node struct {
data interface{}
next *Node
}
type LinkTable struct {
headNode *Node //头节点,不存放数据
length int //当前链表的长度
}
生成一个新节点,data数据和next指针都为nil,使其作为链表的头节点,不用来存放数据
//初始化
func initLinkTable() *LinkTable {
node := new(Node)
linkTable := new(LinkTable)
linkTable.headNode = node
linkTable.length = 0
return linkTable
}
// 获取尾节点
func getTailNode(linkTable *LinkTable) *Node {
curNode := linkTable.headNode
//当前链表只有一个头节点
if curNode.next == nil {
return linkTable.headNode
}
for curNode.next != nil {
curNode = curNode.next
}
return curNode
}
//插入元素
//头插法
func insertHeadNode(data interface{}, linkTable *LinkTable) {
node := &Node{data, nil}
node.next = linkTable.headNode.next
linkTable.headNode.next = node
linkTable.length++
}
//尾插法
func insertTailNode(data interface{}, linkTable *LinkTable) {
node := &Node{data, nil}
curNode := getTailNode(linkTable)
curNode.next = node
linkTable.length++
}
//指定位置插入节点
func append(index int, data interface{}, linktable *LinkTable) {
if index <= 0 || index > linktable.length+1 {
fmt.Println("当前位置错误")
return
}
curNode := linktable.headNode
//找到需要插入节点的前一个节点
for j := 0; j < index-1; j++ {
curNode = curNode.next
}
node := new(Node)
node.data = data
node.next = curNode.next
curNode.next = node
linktable.length++
}
//按序号查找某节点
func findNodeByIndex(index int, linktable *LinkTable) *Node {
if index <= 0 || index > linktable.length {
fmt.Println("当前序号错误")
return nil
}
curNode := linktable.headNode
for j := 0; j < index; j++ {
curNode = curNode.next
}
return curNode
}
//按值查找节点
func findNodeByValue(data interface{}, linktable *LinkTable) *Node {
curNode := linktable.headNode.next
for curNode != nil {
if curNode.data == data {
return curNode
}
curNode = curNode.next
}
return nil
}
// 删除第i个节点
func deleteNode(index int, linktable *LinkTable) {
if index <= 0 || index > linktable.length {
fmt.Println("当前位置错误")
return
}
curNode := linktable.headNode
//找到需要删除节点的前一个节点
for j := 0; j < index-1; j++ {
curNode = curNode.next
}
curNode.next = curNode.next.next
linktable.length--
}
func main() {
// var showmenu = menu()
// showmenu()
linktable := initLinkTable()
insertTailNode(1, linktable)
insertTailNode(2, linktable)
insertTailNode(3, linktable)
insertTailNode(4, linktable)
insertTailNode(5, linktable)
insertTailNode(6, linktable)
fmt.Print("初始链表:")
showLinkTableData(linktable)
fmt.Print("在索引为3处插入值为7的节点:")
append(3, 7, linktable)
showLinkTableData(linktable)
fmt.Print("查找索引为1的节点:")
fmt.Println(findNodeByIndex(1, linktable))
fmt.Print("查找值为6的节点:")
fmt.Println(findNodeByValue(6, linktable))
fmt.Print("删除第6个节点:")
deleteNode(6, linktable)
showLinkTableData(linktable)
}


代码链接:LinkTable
作者:104