如何在Go语言中实现链表数据结构?

8 min read

在Go语言中,我们可以使用结构体来表示链表的节点,并使用指针来连接这些节点。

下面是一个简单的链表实现:

package main

import "fmt"

type Node struct {
    data int
    next *Node
}

type LinkedList struct {
    head *Node
}

// 在链表尾部插入一个节点
func (ll *LinkedList) Append(data int) {
    newNode := &Node{data: data}
    if ll.head == nil {
        ll.head = newNode
        return
    }
    lastNode := ll.head
    for lastNode.next != nil {
        lastNode = lastNode.next
    }
    lastNode.next = newNode
}

// 在链表头部插入一个节点
func (ll *LinkedList) Prepend(data int) {
    newNode := &Node{data: data}
    newNode.next = ll.head
    ll.head = newNode
}

// 删除一个节点
func (ll *LinkedList) Delete(data int) {
    if ll.head == nil {
        return
    }
    if ll.head.data == data {
        ll.head = ll.head.next
        return
    }
    prevNode := ll.head
    for prevNode.next != nil {
        if prevNode.next.data == data {
            prevNode.next = prevNode.next.next
            return
        }
        prevNode = prevNode.next
    }
}

// 打印链表
func (ll *LinkedList) Print() {
    current := ll.head
    for current != nil {
        fmt.Printf("%d ", current.data)
        current = current.next
    }
    fmt.Println()
}

func main() {
    ll := LinkedList{}
    ll.Append(1)
    ll.Append(2)
    ll.Append(3)
    ll.Print() // 1 2 3

    ll.Prepend(0)
    ll.Print() // 0 1 2 3

    ll.Delete(1)
    ll.Print() // 0 2 3
}

通过使用这个简单的链表实现,我们可以在Go语言中轻松地操作链表数据结构。