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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章