go语言实现链表

声明结构体

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

猜你喜欢

转载自blog.csdn.net/jiyilanzhou/article/details/80361921