Golang 向链表添加元素
在Golang中,我们可以使用节点结构和链表结构向链表中添加元素。链表是由一系列节点组成的数据结构,每个节点都包含一个元素和一个指向序列中下一个节点的引用。它是一个线性数据结构,通过指针连接项,从第一个节点(头)到最后一个节点,每个节点都可以被访问(尾)。与需要移动所有元素的数组不同,链表只需要改变相邻节点的指针,因此在需要经常动态添加或删除数据的情况下非常有用。
方法1:使用节点结构
在这种方法中,链表被表示为一串节点,每个节点由一个值和指向列表中下一个节点的指针组成。add_node函数通过使用列表的头部引用和一个值将一个新的节点添加到列表的末尾。主要函数提供了遍历和向列表添加成员的示例。
步骤
- 步骤1 − 创建一个package main并在程序中声明fmt(格式化包)包,其中main生成可执行代码而fmt在格式化输入和输出方面有帮助。
-
步骤2 − 创建一个带有整数值和指向后续节点的指针的node结构。
-
步骤3 − 创建一个add_node函数,接受整数值和指向链表头部的指针作为参数。
-
步骤4 − 使用add_node函数创建一个具有指定值的新节点。
-
步骤5 − 如果头部为空,则将新节点分配给链表的头部。
-
步骤6 − 如果链表的头部不为空,则遍历链表到最后一个节点,并为新节点分配最后一个节点的下一个指针。
-
步骤7 − 返回连接列表的头部。
-
步骤8 − 在主方法中创建一个指向链表头部的指针,并将其初始化为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结构体来表示链表,其中包括一个指向头节点的指针。通过linkedList结构体的addNode方法,在链表的末尾添加一个包含给定整数值的新节点。linkedList结构体的traverse方法输出链表中每个节点的值。主函数展示了如何构建一个链表,向其添加条目,并使用其函数遍历链表。
步骤
- 步骤1 −在程序中创建一个package main,并声明fmt(format包),其中main产生可执行代码,fmt帮助格式化输入输出。
-
步骤2 −创建一个带有整数值和指向下一个节点的指针的node结构体。
-
步骤3 −创建一个带有指向链表头节点的指针的linkedList结构体。
-
步骤4 −创建一个接受linkedList结构体的整数值的addNode方法。
-
步骤5 −使用addNode函数创建一个具有指定值的新节点。
-
步骤6 −如果头节点为空,则将新节点赋给链表的头节点。如果链表的头节点不为空,则遍历链表到最后一个节点。
-
步骤7 −将新节点的next指针指向最后一个节点的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
结论
我们执行了使用两个示例来向链表中添加元素的程序。在第一个示例中,我们使用了节点结构,而在第二个示例中,我们使用了链表结构。