Golang 访问链表中的元素
在Go编程语言中,链表是一种数据结构,它包含一个节点,该节点进一步包含两个值,即数据和下一个节点的指针,其中下一个指向链表中的下一个节点。本程序将使用两种方法来访问链表中的元素。 第一个示例将使用迭代法,第二个示例将使用变量current来访问元素。
方法1:使用迭代法
此程序构建了一个具有三个成员的链表,并遍历该链表以访问和输出每个元素的值。 输出将是一个具有预定义元素的链表。让我们来看看代码和算法以理解这个概念。
步骤
- 第1步 - 创建一个包main并在程序中声明fmt(格式化包)包,其中main生成可执行代码,fmt用于格式化输入和输出。
-
第2步 - 创建一个Node结构,其中包含两个字段value_num和next,每个字段都包含指向链表中下一个节点的指针。 value_num包含数据。
-
第3步 - 在main函数中创建一个具有值1的头节点。
-
第4步 - 将一个具有值2的新节点设置为头节点的下一个字段。
-
第5步 - 将一个具有值3的新节点设置为第二个节点的下一个字段。
-
第6步 - 使用刚刚创建的变量节点的值来设置头节点的值。
-
第7步 - 使用for循环遍历链表。循环将在节点变量等于nil(表示链表末端)时继续,根据循环条件node!= nil。
-
第8步 - 使用fmt.Println(node.value_num)在循环的主体中打印当前节点的值。
-
第9步 - 使用node = node.next来更新节点变量为链表中的下一个节点。
-
第10步 - 重复第6步到第8步,直到链表末端。
示例
在此示例中,我们将使用迭代法来访问链表的元素。让我们通过代码来看一下。
package main
import "fmt"
// Node represents a node in a linked list
type Node struct {
value_num int
next *Node
}
//create main function to execute the program
func main() {
head := &Node{value_num: 10}
head.next = &Node{value_num: 20}
head.next.next = &Node{value_num: 30}
// Accessing elements from linked list
fmt.Println("Accessing elements of linked list:")
node := head
for node != nil {
fmt.Println(node.value_num)
node = node.next
}
}
输出
Accessing elements of linked list:
10
20
30
方法2:使用当前变量
这种方法与之前讨论的方法类似,这里我们只使用一个变量current来遍历链表,而不是使用节点。在链表中,变量current从头节点开始,并在每次迭代后更新以指向下一个节点。当current达到零时,链表被认为达到了结尾。
步骤
- 步骤1 - 在程序中创建一个名为main的包,并声明fmt(格式化包)包。main包生成可执行代码,而fmt包在格式化输入和输出时起到帮助作用。
-
步骤2 - 创建一个Node结构体,包含两个字段:value_num和next,每个字段都包含一个指向链表中下一个节点的指针。Value包含数据。
-
步骤3 - 在main函数中创建一个值为10的头节点。
-
步骤4 - 将一个值为20的新节点设置为头节点的下一个节点。
-
步骤5 - 将一个值为30的新节点设置为第二个节点的下一个节点。
-
步骤6 - 将头节点设置为变量current的值。
-
步骤7 - 使用for循环遍历链表。由于链表的结尾由条件语句current != nil表示,循环将持续运行,直到当前变量等于nil。
-
步骤8 - 在循环体中使用fmt.Println(current.value)打印当前节点的值。
-
步骤9 - 使用current = current将当前变量移动到链表中的下一个节点。
-
步骤10 - 重复步骤6至8,直到链表尾部。
示例
在这个示例中,我们将使用一个current变量进行迭代。
package main
import "fmt"
// Node represents a node in a linked list
type Node struct {
value_num int
next *Node
}
//create main function to execute the program
func main() {
head := &Node{value_num: 10}
head.next = &Node{value_num: 20}
head.next.next = &Node{value_num: 30}
// Accessing elements from linked list
fmt.Println("Accessing elements of linked list:")
current := head
for current != nil {
fmt.Println(current.value_num)
current = current.next
}
}
输出
Accessing elements of linked list:
10
20
30
结论
我们执行了使用两个示例访问链表元素的程序。在第一个示例中,我们通过遍历链表来执行,在第二个示例中,我们使用了一个当前变量来遍历LinkedList。两个程序都给出了相似的输出。因此,程序成功执行。