Golang 将链表转换为集合
在本教程中,我们将编写一个Golang程序,将链表转换为集合。链表是动态创建的结构,它有两个元素,一个用于存储值,另一个用于存储下一个结构的地址。集合是一种抽象数据类型,可以存储特定的值,没有重复值,并且没有特定的顺序。
将链表转换为集合
现在让我们看一个将链表转换为集合的示例。
语法
func make([]type, length, capacity) []type
The make函数用于创建一个切片或映射。它接受三个参数,第一个是我们希望创建的切片的名称和类型,然后是切片的长度和容量。该函数然后返回最终的切片。
步骤
步骤1 - 首先,我们需要导入fmt包。
步骤2 - 下一步是创建一个节点。为此,我们定义了一个名为node的新结构。
步骤3 - 然后我们需要创建一个linkedlist结构。它也有两个字段,一个是指向头节点的指针变量called head。
步骤4 - 然后我们初始化了两个函数,一个是initlist()函数。这个函数在linkedlist结构上定义,并返回linkedlist的地址。
步骤5 - 第二个函数命名为prepend,它用于将一个新的节点元素添加到链表中,并以节点作为参数。
步骤6 - 一旦数据被添加到链表的当前节点中,我们需要将链表的下一个指针指向下一个节点,并递增链表的长度。
步骤7 - 开始main函数,并通过调用initlist()函数创建一个名为mylist的新链表。
步骤8 - 然后我们创建了一对节点,并将字符串值存储在它们中。
步骤9 - 下一步是将这些节点组合在一起形成一个链表,为此,我们通过将每个节点作为参数传递给函数来调用prepend()函数。
步骤10 - 然后我们需要创建一个集合。我们将其命名为newset,并以字符串格式存储数据。
步骤11 - 下一步是遍历链表,在每次迭代中,我们从链表中提取值,并将其存储在集合中。
步骤12 - 然后我们需要将链表的指针变量指向下一个节点,并重复此过程,直到获取到nil或null值为止。
步骤13 - 下一步是打印集合,为此我们使用了fmt.Println()函数。
示例
package main
import (
"fmt"
)
type node struct {
data string
next *node
}
type linkedlist struct {
len int
head *node
}
func initList() *linkedlist {
return &linkedlist{}
}
func (l *linkedlist) prepend(n *node) {
node := &node{
data: n.data,
}
if l.head == nil {
l.head = node
} else {
node.next = l.head
l.head = node
}
l.len++
return
}
func main() {
mylist := initList()
node1 := &node{data: "Apple"}
node2 := &node{data: "mango"}
node3 := &node{data: "Banana"}
mylist.prepend(node1)
mylist.prepend(node2)
mylist.prepend(node3)
newset := make(map[string]struct{})
for mylist.head != nil {
newset[mylist.head.data] = struct{}{}
mylist.head = mylist.head.next
}
fmt.Println("The obtained set is:", newset)
}
输出
The obtained set is: map[Banana:{} mango:{} Apple:{}]
结论
我们成功编译并执行了一个Go语言程序,将链表转换为集合,并提供了一个示例。