聲明結構體
//聲明全局變量,保存頭結點
var head *Node
var curr *Node
//聲明節點類型
type Node struct {
//數據域
Data string
//地址域
NextNode *Node
}
//創建頭結點
func CreateHeadNode(data string) *Node {
var node *Node = new(Node)
node.Data = data
node.NextNode = nil
//保存頭結點
head = node
curr = node
return node
}
//添加新節點
func AddNode(data string) *Node {
var newNode *Node = new(Node)
newNode.Data = data
newNode.NextNode = nil
//掛接節點
curr.NextNode = newNode
curr = newNode
//返回值
return newNode
}
//遍歷鏈表
func ShowNodes() {
var node = head
for {
if node.NextNode == nil {
fmt.Println(node.Data)
break
} else {
fmt.Println(node.Data)
node = node.NextNode
}
}
}
//計算節點的個數
func NodeCnt() int {
var cnt int = 1
var node = head
for {
if node.NextNode == nil {
break
} else {
node = node.NextNode
cnt = cnt + 1
}
}
return cnt
}
//插入節點
func InsertNodeByIndex(index int, data string) *Node {
if index == 0 {
//添加的爲新的頭節點
var node *Node = new(Node)
node.Data = data
node.NextNode = head
head = node
} else if index > NodeCnt()-1 {
//添加節點
AddNode(data)
} else {
//中間插入節點
var n = head
for i := 0; i < index-1; i++ {
n = n.NextNode
}
var newNode *Node = new(Node)
newNode.Data = data
newNode.NextNode = n.NextNode
n.NextNode = newNode
}
return nil
}
//刪除節點
func DeleteNodeByIndex(index int) {
var node = head
if index == 0 {
//刪除頭節點,就是第二個節點爲頭結點
head = node.NextNode
} else {
for i := 0; i < index-1; i++ {
node = node.NextNode
}
node.NextNode = node.NextNode.NextNode
}
}
//修改指定下標的節點內容
func UpdateNodeByIndex(index int, data string) {
var node = head
if index == 0 {
head.Data = data
} else {
for i := 0; i < index; i++ {
node = node.NextNode
}
node.Data = data
}
}
package main
import (
"MyHashMap/LinkNodes"
"fmt"
)
func main() {
fmt.Println("Hello World!")
//創建頭結點
LinkNodes.CreateHeadNode("頭結點")
LinkNodes.AddNode("第二節點")
LinkNodes.AddNode("第三節點")
LinkNodes.AddNode("第四節點")
LinkNodes.ShowNodes()
fmt.Println(LinkNodes.NodeCnt())
}
Hello World!
頭結點
第二節點
第三節點
第四節點
4
func main() {
fmt.Println("Hello World!")
//創建頭結點
LinkNodes.CreateHeadNode("頭結點")
LinkNodes.AddNode("第二節點")
LinkNodes.AddNode("第三節點")
LinkNodes.AddNode("第四節點")
LinkNodes.InsertNodeByIndex(3, "新節點")
LinkNodes.ShowNodes()
fmt.Println(LinkNodes.NodeCnt())
}
結果:Hello World!
頭結點
第二節點
第三節點
新節點
第四節點
5
func main() {
fmt.Println("Hello World!")
//創建頭結點
LinkNodes.CreateHeadNode("頭結點")
LinkNodes.AddNode("第二節點")
LinkNodes.AddNode("第三節點")
LinkNodes.AddNode("第四節點")
LinkNodes.InsertNodeByIndex(3, "新節點")
LinkNodes.UpdateNodeByIndex(1, "abc")
LinkNodes.ShowNodes()
fmt.Println(LinkNodes.NodeCnt())
}
結果:
Hello World!
頭結點
abc
第三節點
新節點
第四節點
5