Golang 实现链表

Golang 实现链表

在Go编程语言中,链表是一种由一系列节点通过next指针链接在一起的线性数据结构。我们将在这个程序中使用两种方法实现链表。第一种方法使用结构体,第二个示例使用列表结构。

方法1:使用结构体

在这种方法中,链表中有三个节点,每个节点的值分别为1、2或3。每个节点的next指针指向列表中它后面的节点,head变量指向第一个节点。根据每个节点的next指针,循环遍历链表直到达到一个具有空next指针的节点,表示列表的结束。

步骤

  • 步骤1 − 创建一个main包,并在程序中声明fmt(格式化包)包,其中main生成可执行的代码,fmt帮助格式化输入和输出。

  • 步骤2 − 创建一个带有next和num_val字段的节点结构。节点的值存储在value中,next是指向列表中它后面的节点的指针。

  • 步骤3 − 在main函数中创建一个头节点,并将列表的第一个值设置为它的num_value。

  • 步骤4 − 创建第二个节点,并将其num_value设置为列表中的下一个值。

  • 步骤5 − 通过将头节点的next指针设置为第二个节点,可以连接头节点和第二个节点。

  • 步骤6 − 要添加更多节点并连接它们,重复步骤3和4以完成连接的列表。

  • 步骤7 − 在头节点的下一个步骤中,创建一个当前指针并设置它。

  • 步骤8 − 使用for循环沿着链表遍历时,按照每个节点的next指针进行下一个指针的操作。

  • 步骤9 − 使用fmt.Println()函数在for循环中打印当前节点的值,其中ln表示换行。

  • 步骤10 − 通过将其更新为下一个指针的值,当前指针被更改为列表中的下一个节点。

  • 步骤11 − 重复步骤7-9,直到当前节点的next指针为空,表示列表结束。

示例

在这个示例中,我们将使用结构体来实现链表。

package main
import "fmt"

type node struct { //create a struct
   num_val int
   next    *node
}

func main() {
   head := &node{num_val: 1}
   head.next = &node{num_val: 2}
   head.next.next = &node{num_val: 3}
   fmt.Println("The implementation of linked list is given as following:")

   current := head
   for current != nil {               //run a for loop to print values of current node
      fmt.Println(current.num_val)
      current = current.next
   }
}

输出

The implementation of linked list is given as following:
1
2
3

方法2:使用列表结构

在这种实现中,链表被实现为一个带有指向根节点的头字段的List结构。通过构造一个新节点,将其下一个指针设置为现有头节点,并修改List结构的头字段以指向新节点,Insert方法在列表的开头添加一个具有指定值的新节点。按照每个节点的下一个指针,Print方法打印列表中每个节点的值。

步骤

  • 步骤1 - 在程序中创建一个main包,并声明fmt(格式化包)包,其中main生成可执行代码,fmt帮助格式化输入和输出。

  • 步骤2 - 创建一个List结构,并给其头字段赋予*Node类型。

  • 步骤3 - 创建一个Node结构,具有值和其后节点的两个字段。节点的值存储在value中,next是指向列表中其后节点的指针。

  • 步骤4 - 创建一个接受List结构中的值作为参数的Insert方法。

  • 步骤5 - 在Insert方法中创建一个具有指定值的新节点n。

  • 步骤6 - 将新节点的下一个指针设置为List结构的当前头。

  • 步骤7 - 更新List结构的头字段以指向新节点,以指向新节点。

  • 步骤8 - 为List结构创建一个名为Print的方法,该方法迭代链表并输出每个节点的值。

  • 步骤9 - 在主函数中创建一个List结构,并使用Insert方法向其添加多个节点。

  • 步骤10 - 调用Print方法来打印列表中每个节点的值。

示例

在本示例中,我们将使用List结构来实现链表。

package main
import "fmt"

type List struct { //create a list struct
   head *Node
}

type Node struct {
   value_num int
   next      *Node
}

func (l *List) Insert(value_num int) {
   n := &Node{value_num: value_num}
   n.next = l.head
   l.head = n
}

func (l *List) Print() {
   current := l.head
   for current != nil {
      fmt.Println(current.value_num)
      current = current.next
   }
}

func main() {
   list := &List{}  //create a list struct
   fmt.Println("The implementation of linked list is given as:")
   list.Insert(3)
   list.Insert(2)
   list.Insert(1)
   list.Print()
}

输出

The implementation of linked list is given as:
1
2
3

结论

我们执行了实现链表的程序,使用了两个示例。在第一个示例中,我们使用了struct,在第二个示例中,我们使用了list struct来实现链表。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程