Golang程序 链表和数组相关转换
在Go编程语言中,链表是一种由一系列节点组成的数据结构,每个节点都有一个值和一个指向它后面节点的引用(指针)。由于项目可以被添加到列表中或从列表中删除,而不需要重新排列整个数据集,因此链接列表提供了一种动态的、可适应的方法来存储数据。使用结构体和指针,链接列表可以在Go中实现,而数组是一组固定大小的相同元素,可以通过它们各自的索引来访问,这些索引是以零为基础的整数。数组的大小在声明的时候就已经确定了,以后不能再改变了。
方法1:将链表转换为数组
在这种方法中,我们使用节点结构将链表转换为数组。在链接列表中设置值,并转换为使用make函数创建的数组。循环在链接列表上运行,元素被追加到数组中,然后使用 fmt 包打印在控制台。
算法
- 第1步 – 创建一个包main,并在程序中声明fmt(format package)包,其中main产生可执行代码,fmt帮助格式化输入和输出。
-
第2步 – 创建一个node类型的结构,包含int类型的val和node类型的next。
-
第 3步– 创建一个名为array的空白数组。
-
第 4 步 – 创建一个名为curr的指针,并将其初始化为链表的头部。
-
第 5步 – 直到curr不是nil,用curr.next命令运行一个循环。
-
第6步 – 将数组返回到链表中。
例子
在这个例子中,我们将把链表转换为数组。
package main
import "fmt"
type Node struct {
val int
next *Node
}
func main() {
// Creating linked list
head := &Node{val: 10, next: &Node{val: 20, next: &Node{val: 30, next: nil}}}
// Converting linked list to an array
array := make([]int, 0)
for curr := head; curr != nil; curr = curr.next {
array = append(array, curr.val)
}
fmt.Println("The linked list is converted into array:")
fmt.Println("Linked List:", array)
}
输出
The linked list is converted into array:
Linked List: [10 20 30]
方法2:将数组转换为链表
在这个方法中,我们借助于函数array_to_List将数组转换为链表,在这个函数中,将运行一个循环,并将头值返回给函数。列表将使用fmt包打印在控制台。
算法
- 第1步 – 创建一个包main,并在程序中声明fmt(format package)包,其中main产生可执行代码,fmt帮助格式化输入和输出。
-
第2步 – 用数组的第一个元素的值创建一个叫做head的节点。
-
第 3步 – 创建一个指针curr并将其初始值设置为head。然后,遍历数组的其余元素。
-
第4步 – 添加一个新的节点,newNode带有当前元素的值。
-
第5步 – 在newNode上移动curr指针。
-
第6步 – 在下一步,将head返回给函数。
例子
在这个例子中,我们将把数组转换为链表。
package main
import "fmt"
type Node struct {
val int
next *Node
}
func array_to_List(array []int) *Node {
head := &Node{val: array[0], next: nil}
curr := head
for i := 1; i < len(array); i++ {
curr.next = &Node{val: array[i], next: nil}
curr = curr.next
}
return head
}
func main() {
// Creating array
array := []int{10, 20, 30}
// Converting array to linked list
head := array_to_List(array)
// Printing linked list
fmt.Println("The array after its converted to linked list:")
for curr := head; curr != nil; curr = curr.next {
fmt.Print(curr.val, " -> ")
}
fmt.Print("nil")
}
输出
The array after its converted to linked list:
10 -> 20 -> 30 -> nil
总结
我们用两个例子执行了将链表转换为数组的程序,反之亦然。在第一个例子中,我们用数组转换链接列表为数组。这两个程序都产生了理想的输出。