Golang程序 添加元素到一个linkedlist中
在 Golang 中,我们可以使用节点结构和链接表结构来向链接表添加元素。链接表是一个由一系列节点组成的数据结构,每个节点都包括一个元素和对序列中后面节点的引用。它是一个线性数据结构,用指针连接各个项目,从第一个节点(头)到最后一个节点,每个节点都可以被访问(尾)。与需要对所有元素进行移位的数组相反,链接列表只需要改变相邻节点的指针,这使得它们在需要经常和动态地添加或撤回数据的情况下很有帮助。
方法1:使用Node结构
在这种方法中,链接列表被显示为一个节点链,每个节点由一个值和一个指向列表中它后面的节点的指针组成。add_node函数通过使用对列表头部的引用和一个值,在列表的末尾添加一个持有该值的新节点。主函数提供了在列表中遍历和添加成员的例子。
算法
- 第1步 – 创建一个包main,并在程序中声明fmt(format package)包,其中main产生可执行代码,fmt帮助格式化输入和输出。
-
第2步– 创建一个节点结构,有一个整数值和一个指向下面节点的指针。
-
第 3步 – 创建一个add_node函数,接受一个整数值和一个指向链表头部的指针作为参数。
-
第4步 – 使用add_node函数创建一个具有指定值的新节点。
-
第 5步 – 如果头部为空,将新节点分配到链表的头部。
-
第6步 – 如果列表的头部不是空的,则遍历链接列表的最后一个节点,并将最后一个节点的下一个指针交给新节点。
-
第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结构来表示链接列表,其中包括一个指向头部节点的指针。通过linkedList结构的addNode方法将一个持有给定整数值的新节点添加到链接列表的末端。linkedList结构的traverse方法输出列表中每个节点的值。main 函数展示了如何建立一个链接列表,向其添加条目,并使用其函数遍历它。
算法
- 第1步– 在程序中创建一个包main并声明fmt(format package)包,其中main产生可执行代码,fmt帮助格式化输入和输出。
-
第2步– 创建一个节点结构,包含一个整数值和一个指向下面节点的指针。
-
第 3步– 创建一个linkedList结构,带有指向链接列表头部节点的指针。
-
第4步 – 创建一个addNode方法,接受linkedList结构的一个整数值。
-
第5步 – 使用addNode函数创建一个具有指定值的新节点。
-
第 6步– 如果头部为空,将新节点分配给链接列表的头部。 然后,如果列表的头部不是空的,则遍历链接列表到最后一个节点。
-
第7步 – 给新节点提供最后一个节点的下一个指针。
-
第8步 – 做一个指向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结构。