golang单向链表

发布时间:2024-07-05 01:38:26

Go语言单向链表的实现

单向链表(Singly Linked List)是一种常见的数据结构,它由节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。在Go语言中,我们可以使用指针和struct来实现单向链表。

下面是一个简单的示例代码:

``` package main import "fmt" type Node struct { data int next *Node } type LinkedList struct { head *Node } // 在链表末尾添加节点 func (l *LinkedList) Add(data int) { newNode := &Node{data, nil} if l.head == nil { l.head = newNode } else { current := l.head for current.next != nil { current = current.next } current.next = newNode } fmt.Println("节点", newNode.data, "已添加到链表末尾") } // 删除指定数据的节点 func (l *LinkedList) Remove(data int) { if l.head == nil { fmt.Println("链表为空") return } if l.head.data == data { l.head = l.head.next fmt.Println("节点", data, "已从链表中删除") return } current := l.head for current.next != nil { if current.next.data == data { current.next = current.next.next fmt.Println("节点", data, "已从链表中删除") return } current = current.next } fmt.Println("未找到数据为", data, "的节点") } // 打印链表 func (l *LinkedList) Print() { if l.head == nil { fmt.Println("链表为空") return } current := l.head fmt.Print("链表内容:") for current != nil { fmt.Print(current.data, " ") current = current.next } fmt.Println() } func main() { list := LinkedList{} list.Add(1) list.Add(2) list.Add(3) list.Print() list.Remove(2) list.Print() } ```

在上面的示例代码中,定义了一个Node结构体来表示链表中的节点,包含一个数据元素和一个指向下一个节点的指针。另外,还定义了一个LinkedList结构体来表示整个链表,它包含一个头节点。

链表中的操作一般包括添加节点、删除节点和打印链表。在Add方法中,如果链表为空,则将新节点设置为头节点;否则,遍历链表找到最后一个节点,并将其next指针指向新节点。在Remove方法中,如果链表为空,则输出相应的提示信息;否则,遍历链表找到要删除的节点,将其前一个节点的next指针指向其后一个节点。在Print方法中,遍历链表输出每个节点的数据元素。

使用示例

我们可以通过调用上述代码中的方法来使用单向链表。以下是一个示例:

``` func main() { list := LinkedList{} list.Add(1) list.Add(2) list.Add(3) list.Print() list.Remove(2) list.Print() } ```

在这个示例中,我们创建了一个空链表list,并依次添加了三个节点。然后,打印链表内容,输出结果为:"链表内容:1 2 3"。接着,通过调用Remove方法删除值为2的节点。最后,再次打印链表内容,输出结果为:"链表内容:1 3"。

总结

通过使用指针和struct,我们可以在Go语言中实现单向链表。链表是一种重要的数据结构,广泛用于各种问题的解决方案中。

希望本文对你理解和使用Go语言中的单向链表有所帮助!

相关推荐