Apprenez la méthode d'implémentation d'une liste chaînée unique dans le langage Go à partir de zéro
Lors de l'apprentissage des structures de données et des algorithmes, la liste chaînée unique est l'une des structures de données de base et importantes. Cet article expliquera comment utiliser le langage Go pour implémenter une liste à chaînage unique et aidera les lecteurs à mieux comprendre cette structure de données à travers des exemples de code spécifiques.
Une liste à chaînage unique est une structure de données linéaire composée d'une série de nœuds. Chaque nœud contient des données et un pointeur vers le nœud suivant. Le pointeur du dernier nœud pointe vers null.
Les listes à lien unique prennent généralement en charge plusieurs opérations de base, notamment l'insertion, la suppression et la recherche. Nous allons maintenant mettre en œuvre ces opérations étape par étape.
Tout d'abord, nous devons définir la structure de nœuds d'une liste à chaînage unique :
type Node struct { data interface{} next *Node }
Dans la structure ci-dessus, le champ data
est utilisé pour stocker les données du nœud , next Le champ
est un pointeur vers le nœud suivant. data
字段用于存储节点的数据,next
字段是指向下一个节点的指针。
接下来,我们需要定义一个LinkedList
LinkedList
pour représenter une liste chaînée unique et fournir quelques méthodes de fonctionnement de base : type LinkedList struct { head *Node } func NewLinkedList() *LinkedList { return &LinkedList{} }
func (list *LinkedList) Insert(data interface{}) { newNode := &Node{data: data} if list.head == nil { list.head = newNode } else { newNode.next = list.head list.head = newNode } }
func (list *LinkedList) Delete(data interface{}) { if list.head == nil { return } if list.head.data == data { list.head = list.head.next return } prev := list.head current := list.head.next for current != nil { if current.data == data { prev.next = current.next return } prev = current current = current.next } }
func (list *LinkedList) Search(data interface{}) bool { current := list.head for current != nil { if current.data == data { return true } current = current.next } return false }
package main import "fmt" type Node struct { data interface{} next *Node } type LinkedList struct { head *Node } func NewLinkedList() *LinkedList { return &LinkedList{} } func (list *LinkedList) Insert(data interface{}) { newNode := &Node{data: data} if list.head == nil { list.head = newNode } else { newNode.next = list.head list.head = newNode } } func (list *LinkedList) Delete(data interface{}) { if list.head == nil { return } if list.head.data == data { list.head = list.head.next return } prev := list.head current := list.head.next for current != nil { if current.data == data { prev.next = current.next return } prev = current current = current.next } } func (list *LinkedList) Search(data interface{}) bool { current := list.head for current != nil { if current.data == data { return true } current = current.next } return false } func main() { list := NewLinkedList() list.Insert(1) list.Insert(2) list.Insert(3) fmt.Println(list.Search(2)) // Output: true list.Delete(2) fmt.Println(list.Search(2)) // Output: false }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!