Go语言程序:向链表添加元素
在 Go 语言中,我们可以使用节点结构体(node struct)和链表结构体(linkedlist struct)来向链表添加元素。链表是一种数据结构,由一系列节点组成,每个节点包含一个元素以及指向序列中下一个节点的引用。它是一种线性数据结构,节点之间通过指针连接,并且可以从第一个节点(头部)访问到最后一个节点(尾部)。与需要移动所有元素的数组不同,链表只需要修改相邻节点的指针,这使得它们在需要频繁且动态地添加或删除数据的情况下非常有用。
方法 1:使用节点结构体
在这种方法中,链表被表示为节点链,其中每个节点都由一个值和一个指向列表中下一个节点的指针组成。add_node 函数使用对列表头部的引用和一个值来添加一个包含该值的新节点到列表的末尾。主函数提供了一些遍历和向列表中添加元素的示例。
算法
步骤 1 − 创建一个名为 main 的包,并在程序中声明 fmt(格式化包),其中 main 生成可执行代码,fmt 帮助格式化输入和输出。
步骤 2 − 创建一个节点结构体,包含一个整数值和一个指向下一个节点的指针。
步骤 3 − 创建一个 add_node 函数,该函数接受一个整数值和一个指向链表头部的指针作为参数。
步骤 4 − 使用 add_node 函数创建一个具有指定值的新节点。
步骤 5 − 如果头部为空,则将新节点分配给链表的头部。
步骤 6 − 如果列表头部不为空,则遍历链表到最后一个节点,并将新节点的 next 指针指向最后一个节点。
步骤 7 − 返回连接列表的头部。
步骤 8 − 在 main 函数中创建一个指向链表头部的指针,并将其初始化为 nil。
步骤 9 − 使用 add_node 函数重复添加元素到链表中,同时更新列表的头部。
步骤 10 − 从头部开始遍历链表,打印每个节点的值。
步骤 11 − 使用 fmt.Println() 函数执行打印语句,其中 ln 表示换行。
示例
在这个示例中,我们将使用节点结构体向链表添加元素。让我们看看代码。
package main import "fmt" type node struct { //define a node struct value int next *node } func add_node(head *node, value int) *node { newNode := &node{value: value} if head == nil { head = newNode } else { current := head for current.next != nil { current = current.next } current.next = newNode } return head } func main() { fmt.Println("The elements added in the linked list are:") var head *node head = add_node(head, 10) //add elements to the list head = add_node(head, 20) head = add_node(head, 30) current := head for current != nil { fmt.Println(current.value) //print the added values current = current.next } }
输出
The elements added in the linked list are: 10 20 30
方法 2:使用链表结构体
此示例使用一个单独的 linkedList 结构体来表示链表,该结构体包含一个指向头部节点的指针。linkedList 结构体的 addNode 方法将一个包含给定整数值的新节点添加到链表的末尾。linkedList 结构体的 traverse 方法输出列表中每个节点的值。主函数演示了如何创建链表、向其中添加元素以及使用其函数遍历链表。
算法
步骤 1 − 创建一个名为 main 的包,并在程序中声明 fmt(格式化包),其中 main 生成可执行代码,fmt 帮助格式化输入和输出。
步骤 2 − 创建一个节点结构体,包含一个整数值和一个指向下一个节点的指针。
步骤 3 − 创建一个 linkedList 结构体,包含一个指向链表头部节点的指针。
步骤 4 − 为 linkedList 结构体创建一个 addNode 方法,该方法接受一个整数值作为参数。
步骤 5 − 使用 addNode 函数创建一个具有指定值的新节点。
步骤 6 − 如果头部为空,则将新节点分配给链表的头部。然后,如果列表头部不为空,则遍历链表到最后一个节点。
步骤 7 − 将新节点的 next 指针指向最后一个节点。
步骤 8 − 在 main 函数中创建一个指向 linkedList 结构体的指针,并对其进行初始化。
步骤 9 − 使用 addNode 函数重复添加元素到链表中。
步骤 10 − 使用 traverse 方法打印链表中每个节点的值。
步骤 11 − 使用 fmt.Println() 函数执行打印语句,其中 ln 表示换行。
示例
在这个示例中,我们将使用 LinkedList 结构体向列表添加元素。
package main import "fmt" type node struct { //define a node struct value int next *node } type linkedList struct { head *node } func (lt *linkedList) addNode(value int) { newNode := &node{value: value} if lt.head == nil { lt.head = newNode } else { current := lt.head for current.next != nil { current = current.next } current.next = newNode } } func (lt *linkedList) traverse() { current := lt.head for current != nil { fmt.Println(current.value) //print the added values current = current.next } } func main() { list := &linkedList{} fmt.Println("The elements added to linked list are:") list.addNode(10) //add values to the list list.addNode(20) list.addNode(30) list.traverse() }
输出
The elements added to linked list are: 10 20 30
结论
我们使用两个示例执行了向链表添加元素的程序。在第一个示例中,我们使用了节点结构体,在第二个示例中,我们使用了 LinkedList 结构体。