Go语言程序:链表与数组的相互转换
在Go编程语言中,链表是一种由一系列节点组成的动态数据结构,每个节点包含一个值和指向下一个节点的引用(指针)。链表允许在不重新排列整个数据集的情况下添加或删除项目,提供了一种动态且灵活的数据存储方式。Go语言中可以使用结构体和指针来实现链表,而数组是大小固定的同类型元素的集合,可以通过其整数索引(从零开始)访问。数组的大小在声明时确定,之后无法更改。
方法一:将链表转换为数组
在此方法中,我们使用节点结构体将链表转换为数组。链表中的值被设置并转换为使用make函数创建的数组。循环遍历链表,并将元素添加到数组中,然后使用fmt包在控制台上打印。
算法
步骤1 − 创建一个名为main的包,并在程序中声明fmt(格式化包),其中main生成可执行代码,fmt帮助格式化输入和输出。
步骤2 − 创建一个名为node的结构体,包含类型为int的val和类型为Node的next。
步骤3 − 创建一个名为array的空数组。
步骤4 − 创建一个名为curr的指针,并将其初始化为链表的头节点。
步骤5 − 当curr不为空时,使用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]
方法二:将数组转换为链表
在此方法中,我们借助函数array_to_List将数组转换为链表,该函数将运行一个循环并返回头节点值。链表将使用fmt包在控制台上打印。
算法
步骤1 − 创建一个名为main的包,并在程序中声明fmt(格式化包),其中main生成可执行代码,fmt帮助格式化输入和输出。
步骤2 − 创建一个名为head的头节点,其值为数组的第一个元素。
步骤3 − 创建一个名为curr的指针,并将其初始值设置为head。然后,迭代数组的其余元素。
步骤4 − 添加一个新节点newNode,其值为当前元素。
步骤5 − 将curr指针移动到newNode。
步骤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
结论
我们通过两个示例执行了链表与数组相互转换的程序。在第一个示例中,我们使用将链表转换为数组,在第二个示例中,我们将数组转换为链表。两个程序都生成了预期的输出。