Go语言程序访问链表元素


在 Go 编程语言中,链表是一种数据结构,它包含一个节点,该节点进一步包含两个值:数据和下一个,其中下一个指向列表中的下一个节点。我们将在此程序中使用两种方法来访问链表中的元素。在第一个示例中将使用迭代,在第二个示例中将使用变量 current 来访问元素。

方法 1:使用迭代

此程序构建了一个包含三个成员的链表,并遍历它以访问和输出每个元素的值。输出将是一个包含预定义元素的链表。让我们看看代码和算法以了解这个概念。

算法

  • 步骤 1 − 创建一个包 main 并声明 fmt(格式包)包在程序中,其中 main 生成可执行代码,fmt 帮助格式化输入和输出。

  • 步骤 2 − 创建一个 Node 结构体,它有两个字段:value_num 和 next,每个字段都包含一个指向链表中下一个节点的指针。Value 包含数据。

  • 步骤 3 − 在 main 函数中创建一个值为 1 的头节点。

  • 步骤 4 − 设置一个值为 2 的新节点作为头节点的 next 字段。

  • 步骤 5 − 设置一个值为 3 的新节点作为第二个节点的 next 字段。

  • 步骤 6 − 将您刚刚创建的变量 node 的值设置为头节点。

  • 步骤 7 − 使用 for 循环遍历链表。根据循环条件 node!= nil,循环将继续,直到节点变量等于 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 从头开始,并在每次迭代后更新以引用后续节点。当 current 达到零时,表示链表已到达其结束。

算法

  • 步骤 1 − 创建一个包 main 并声明 fmt(格式包)包在程序中,其中 main 生成可执行代码,fmt 帮助格式化输入和输出。

  • 步骤 2 − 创建一个 Node 结构体,它有两个字段:value_num 和 next,每个字段都包含一个指向链表中下一个节点的指针。Value 包含数据。

  • 步骤 3 − 在 main 函数中创建一个值为 10 的头节点。

  • 步骤 4 − 设置一个值为 20 的新节点作为头节点的 next 字段。

  • 步骤 5 − 设置一个值为 30 的新节点作为第二个节点的 next 字段。

  • 步骤 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

结论

我们使用两个示例执行了访问链表元素的程序。在第一个示例中,我们遍历了链表,在第二个示例中,我们使用了一个 current 变量来遍历 LinkedList。这两个程序都给出了类似的输出。因此,程序执行成功。

更新于: 2023年2月20日

311 次浏览

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告