Golang 将链表转换为数组及反之
在Go编程语言中,链表是由一系列节点组成的数据结构,每个节点都有一个值和一个指向其后节点的引用(指针)。由于可以在不重新排列整个数据集的情况下向列表中添加或删除项目,链表提供了一种动态和适应性的存储数据的方法。使用结构体和指针,可以在Go中实现链表,而数组是一个固定大小的相同元素组,可以通过它们各自的索引(整数,从零开始)进行访问。数组的大小在声明时预先确定,后续无法更改。
方法1:将链表转换为数组
在此方法中,我们使用节点结构将链表转换为数组。将值设置在链表中,并将其转换为使用make函数创建的数组。遍历链表并将元素追加到数组中,然后使用fmt包将其打印到控制台。
步骤
- 步骤1 - 创建一个名为main的包,并在程序中声明fmt(格式化包)包,其中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(格式化包)包,其中main产生可执行代码,fmt用于格式化输入和输出。
-
步骤2 - 创建一个名为head的头节点,并赋值为数组的第一个元素。
-
步骤3 - 创建一个指针curr,并将其初始值设为head。然后,迭代数组的其余元素。
-
步骤4 - 添加一个新节点newNode,其值为当前元素的值。
-
步骤5 - 将curr指针移到newNode上。
-
步骤6 - 在下一步中,将头返回给函数。
示例
在此示例中,我们将把数组转换成链表。
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
结论
我们执行了将链表转换为数组以及反之的程序,使用了两个示例。在第一个示例中,我们使用了数组转换为链表。这两个程序都生成了期望的输出。