Verknüpfte Liste ist eine allgemeine Datenstruktur, die aus einer Reihe von Knoten besteht. Jeder Knoten enthält Daten und einen Zeiger auf den nächsten Knoten. In diesem Artikel verwenden wir die Go-Sprache, um eine einfache verknüpfte Liste zu implementieren.
1. Knotentyp definieren
Zuerst müssen wir einen Knotentyp definieren. Der Knoten sollte ein Datenelement und einen Zeiger auf den nächsten Knoten enthalten. Der Code lautet wie folgt:
type Node struct { Data interface{} //节点存储的数据 Next *Node //指向下一个节点的指针 }
Wir verwenden interface{}, um Knotendaten zu speichern, wodurch die verknüpfte Liste jede Art von Daten speichern kann.
2. Definieren Sie den Typ der verknüpften Liste.
Als nächstes müssen wir einen Typ der verknüpften Liste definieren. Es sollte einen Zeiger auf den ersten Knoten enthalten. Gleichzeitig haben wir zwei Methoden hinzugefügt: AddNode und Traverse.
type LinkedList struct { Head *Node //指向第一个节点的指针 } //添加一个节点 func (l *LinkedList) AddNode(data interface{}) { newNode := &Node{Data: data} if l.Head == nil { l.Head = newNode } else { current := l.Head for current.Next != nil { current = current.Next } current.Next = newNode } } //遍历链表并执行函数 func (l *LinkedList) Traverse(fn func(interface{})) { current := l.Head for current != nil { fn(current.Data) current = current.Next } }
Die AddNode-Methode fügt einen Knoten am Ende der verknüpften Liste hinzu. Wenn die verknüpfte Liste leer ist, wird der hinzugefügte Knoten zum ersten Knoten. Andernfalls durchlaufen wir die verknüpfte Liste, suchen den letzten Knoten und fügen den neuen Knoten als nächsten Knoten hinzu.
Die Traverse-Methode verwendet eine Rückruffunktion, um jeden Knoten in der verknüpften Liste zu bearbeiten. Es durchläuft jeden Knoten in der verknüpften Liste und führt dann die übergebene Funktion auf jedem Knoten aus. Wir können diese Methode verwenden, um die verknüpfte Liste zu durchlaufen und jeden Knoten zu drucken:
func main() { list := LinkedList{} list.AddNode("A") list.AddNode("B") list.AddNode("C") list.Traverse(func(data interface{}) { fmt.Println(data) }) }
Der obige Code wird gedruckt:
A B C
3. Löschen Sie den Knoten
#🎜 🎜#Jetzt fügen wir eine Methode hinzu, um einen Knoten aus der verknüpften Liste zu löschen.//删除链表中的节点 func (l *LinkedList) RemoveNode(target interface{}) { if l.Head == nil { return } if l.Head.Data == target { l.Head = l.Head.Next return } current := l.Head for current.Next != nil { if current.Next.Data == target { current.Next = current.Next.Next return } current = current.Next } }
package main import "fmt" type Node struct { Data interface{} //节点存储的数据 Next *Node //指向下一个节点的指针 } type LinkedList struct { Head *Node //指向第一个节点的指针 } //添加一个节点 func (l *LinkedList) AddNode(data interface{}) { newNode := &Node{Data: data} if l.Head == nil { l.Head = newNode } else { current := l.Head for current.Next != nil { current = current.Next } current.Next = newNode } } //遍历链表并执行函数 func (l *LinkedList) Traverse(fn func(interface{})) { current := l.Head for current != nil { fn(current.Data) current = current.Next } } //删除链表中的节点 func (l *LinkedList) RemoveNode(target interface{}) { if l.Head == nil { return } if l.Head.Data == target { l.Head = l.Head.Next return } current := l.Head for current.Next != nil { if current.Next.Data == target { current.Next = current.Next.Next return } current = current.Next } } func main() { list := LinkedList{} list.AddNode("A") list.AddNode("B") list.AddNode("C") //遍历链表 list.Traverse(func(data interface{}) { fmt.Println(data) }) //删除节点并再次遍历链表 list.RemoveNode("B") list.Traverse(func(data interface{}) { fmt.Println(data) }) }
A B C A C
Das obige ist der detaillierte Inhalt vonSo implementieren Sie eine verknüpfte Liste in Golang. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!