使用Go语言实现链表
在 Go 编程语言中,链表是一种线性数据结构,由一系列节点组成,这些节点通过下一个指针相互链接,该指针指向下一个地址。我们将使用两种方法在这个程序中实现链表。在第一种方法中将使用结构体,在第二个示例中将使用列表结构体。
方法 1:使用结构体
在这种方法中,此链表中有三个节点,每个节点的值为 1、2 或 3。每个节点的下一个指针指向列表中其后的节点,而 head 变量指向第一个节点。for 循环沿着每个节点的下一个指针遍历链表,直到到达下一个指针为 nil 的节点,这表示列表的结尾。
算法
步骤 1 − 创建一个包 main 并声明程序中的 fmt(格式化包)包,其中 main 生成可执行代码,fmt 帮助格式化输入和输出。
步骤 2 − 创建一个具有 next 和 num_val 字段的节点结构。节点的值存储在 value 中,next 是指向列表中其后节点的指针。
步骤 3 − 在 main 函数中创建一个 head 节点,并将其 num_value 设置为列表的第一个值。
步骤 4 − 应创建一个第二个节点,并将其 num_value 设置为列表中的下一个值。
步骤 5 − 通过将 head 节点的 next 指针设置为第二个节点,可以连接 head 节点和第二个节点。
步骤 6 − 要添加更多节点并将其连接起来,请重复步骤 3 和 4 以完成连接列表。
步骤 7 − 在下一步中,创建指向 head 节点的当前指针并将其设置。
步骤 8 − 使用 for 循环遍历链表时,请遵循每个节点的 next 指针。
步骤 9 − 使用 fmt.Println() 函数在 for 循环内打印当前节点的值,其中 ln 表示换行。
步骤 10 − 通过将其更新为 next 指针的值,当前指针将更改为列表中的下一个节点。
步骤 11 − 重复步骤 7-9,直到当前节点的 next 指针为 nil,这表示列表的结尾。
示例
在这个示例中,我们将使用结构体来实现链表。
package main
import "fmt"
type node struct { //create a struct
num_val int
next *node
}
func main() {
head := &node{num_val: 1}
head.next = &node{num_val: 2}
head.next.next = &node{num_val: 3}
fmt.Println("The implementation of linked list is given as following:")
current := head
for current != nil { //run a for loop to print values of current node
fmt.Println(current.num_val)
current = current.next
}
}
输出
The implementation of linked list is given as following: 1 2 3
方法 2:使用列表结构体
在此实现中,链表被实现为一个 List 结构体,该结构体具有一个指向根节点的 head 字段。通过构造一个新节点,将其 next 指针设置为现有的 head 节点,并将 List 结构体的 head 字段修改为指向新节点,Insert 方法在列表的开头添加一个具有指定值的新节点。Print 方法沿着每个节点的 next 指针遍历列表,并打印每个节点的值。
算法
步骤 1 − 创建一个包 main 并声明程序中的 fmt(格式化包)包,其中 main 生成可执行代码,fmt 帮助格式化输入和输出。
步骤 2 − 创建一个 List 结构体,并将其 head 字段的类型设置为 *Node。
步骤 3 − 创建一个 Node 结构体,其两个字段为 value 和 next。节点的值存储在 value 中,next 是指向列表中其后节点的指针。
步骤 4 − 为 List 结构体创建一个接受一个值作为参数的 Insert 方法。
步骤 5 − 在 Insert 方法内创建一个具有指定值的新节点 n。
步骤 6 − 将新节点的 next 指针设置为 List 结构体的当前 head。
步骤 7 − 要指向新节点,请更新 List 结构体的 head 字段。
步骤 8 − 为 List 结构体创建一个名为 Print 的方法,该方法遍历链表并输出每个节点的值。
步骤 9 − 在 main 函数中创建一个 List 结构体,并使用 Insert 方法向其中添加多个节点。
步骤 10 − 要打印列表中每个节点的值,请调用 Print 方法。
示例
在这个示例中,我们将使用列表结构体来实现链表。
package main
import "fmt"
type List struct { //create a list struct
head *Node
}
type Node struct {
value_num int
next *Node
}
func (l *List) Insert(value_num int) {
n := &Node{value_num: value_num}
n.next = l.head
l.head = n
}
func (l *List) Print() {
current := l.head
for current != nil {
fmt.Println(current.value_num)
current = current.next
}
}
func main() {
list := &List{} //create a list struct
fmt.Println("The implementation of linked list is given as:")
list.Insert(3)
list.Insert(2)
list.Insert(1)
list.Print()
}
输出
The implementation of linked list is given as: 1 2 3
结论
我们使用两个示例执行了实现链表的程序。在第一个示例中,我们使用了结构体,在第二个示例中,我们使用了列表结构体来实现链表。
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP