声明结构体
//声明全局变量,保存头结点 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