Golang程序 访问linked list中的元素
在Go编程语言中,一个链接列表是一个数据结构,它包含一个节点,该节点进一步包含两个值,即数据和下一个,其中下一个指向列表中的下一个节点。在这个程序中,我们将使用两种方法来访问链表中的元素。 在第一个例子中,将使用迭代,在第二个例子中,将使用变量电流来访问元素。
方法一:使用迭代法
这个程序建立了一个有三个成员的链表,通过迭代来访问和输出每个元素的值。输出的结果将是一个带有预定义元素的链表。让我们看看代码和算法来理解这个概念。
算法
- 第1步 – 创建一个包main,并在程序中声明fmt(format package)包,其中main产生可执行代码,fmt帮助格式化输入和输出。
-
第2步 – 创建一个有两个字段的Node结构,value_num和next,每个字段都包含一个指向链表中下一个节点的指针。Value包含数据。
-
第3步 – 在主函数中创建一个值为1的头部节点。
-
第 4步 – 设置一个新的节点,其值为2,作为头部节点的下一个字段。
-
第 5 步–设置一个新的节点,其值为3,作为第二个节点的下一个字段。
-
第6步 – 用你刚刚创建的变量节点的值来设置头部节点。
-
第 7步 – 使用for循环遍历链接列表。循环将继续进行,直到节点变量等于nil,根据循环条件node!=nil,这表示链接列表的结束。
-
第8步 – 使用fmt.Println(node.value_num)在循环的主体中打印当前节点的值。
-
第 9步 – 使用node = node.next来更新node变量到链接列表中的后续节点。
-
第 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达到0时,链接列表就被认为达到了终点。
算法
- 第1步 – 创建一个包main,并在程序中声明fmt(格式包)包,其中main产生可执行代码,fmt帮助格式化输入和输出。
-
第2步 – 创建一个Node结构,它有两个字段,value_num和next,每个字段都包含一个指向链表中下一个节点的指针。Value包含数据。
-
第3步 – 在主函数中创建一个值为10的头部节点。
-
第 4步 – 设置一个新的节点,其值为20,作为头部节点的下一个字段。
-
第 5 步–设置一个新的节点,其值为30,作为第二个节点的下一个字段。
-
第6步 – 设置头部节点为变量电流的等值。
-
第 7步 – 使用for循环遍历链表。由于链接列表的结束是由条件语句current!=nil表示的,循环将继续运行,直到当前变量等于nil。
-
第8步 – 使用fmt.Println(current.value)在循环的主体中打印当前节点的值。
-
第 9步 – 使用current = current,将当前变量移动到链表的下一个节点。
-
第 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:")
current := head
for current != nil {
fmt.Println(current.value_num)
current = current.next
}
}
输出
Accessing elements of linked list:
10
20
30
总结
我们用两个例子执行了访问链表元素的程序。在第一个例子中,我们对链接列表进行了迭代,在第二个例子中,我们使用一个当前变量对链接列表进行了迭代。这两个程序都给出了类似的输出。因此,该程序成功执行。