用golang写的一个链表

发布时间:2024-12-23 04:40:41

链表(Linked List)是一种常见的数据结构,由一系列节点(Node)组成,每个节点都包含数据和指向下一个节点的指针。与数组相比,链表的优势在于插入、删除的时间复杂度为O(1),而查找的时间复杂度为O(n)。在golang中,我们可以使用指针和结构体来实现链表。

1. 定义链表节点

首先,我们需要定义链表节点的结构体,在golang中,可以通过结构体来表示一个节点:

```go type ListNode struct { Val int // 节点的值 Next *ListNode // 指向下一个节点的指针 } ```

其中,`Val`为节点存储的值,`Next`为指向下一个节点的指针。当节点为链表的最后一个节点时,其`Next`指针为空。

2. 创建链表

创建一个链表时,我们可以通过将节点连接起来的方式来构建。如下所示:

```go func createLinkedList(nums []int) *ListNode { dummy := &ListNode{} // 创建一个虚拟头节点 cur := dummy // 定义一个指针指向当前节点 for _, num := range nums { // 创建一个新的节点 newNode := &ListNode{ Val: num, } // 将当前节点的Next指针指向新节点 cur.Next = newNode // 移动指针到下一个节点 cur = cur.Next } return dummy.Next // 返回链表的第一个节点 } ```

以上代码中,我们首先创建了一个虚拟头节点`dummy`,并用`cur`指针指向当前节点。然后,遍历给定的数值数组`nums`,每轮循环都创建一个新的节点,并将当前节点的指针指向新节点,然后将指针向后移动。最后返回链表的第一个节点。

3. 遍历链表

遍历链表是常见的链表操作之一,可以通过循环每个节点来实现:

```go func traverseLinkedList(head *ListNode) { cur := head for cur != nil { // 处理节点的值 fmt.Printf("%d ", cur.Val) // 移动指针到下一个节点 cur = cur.Next } fmt.Println() } ```

以上代码中,我们从链表头节点开始,依次将节点的值打印出来,并移动指针到下一个节点,直到指针为空。

通过上述三个步骤,我们可以使用golang实现一个简单的链表结构。当然,链表还有许多其他操作,如插入、删除、反转等,需要根据具体的需求进行实现。希望本文对你理解golang中链表的基本操作有所帮助!

相关推荐