Maison  >  Article  >  développement back-end  >  Comment rechercher et supprimer des nœuds dans une liste python à lien unique ?

Comment rechercher et supprimer des nœuds dans une liste python à lien unique ?

青灯夜游
青灯夜游original
2019-03-18 14:08:505671parcourir

Dans l'article précédent [Comment insérer et afficher des nœuds dans une liste python à chaînage unique ? ] vous présente ce qu'est une liste à chaînage unique et comment ajouter des nœuds et afficher tous les nœuds. L'article suivant explique comment rechercher et supprimer des nœuds. J'espère qu'il vous sera utile.

Comment rechercher et supprimer des nœuds dans une liste python à lien unique ?

Comment trouver un nœud à partir d'une liste à chaînage unique ?

Comme pour la plupart des structures de données, la seule façon de savoir si un élément existe est de parcourir l'intégralité de la liste chaînée. Notez que nous pouvons utiliser la recherche binaire si la liste chaînée est triée. Mais ici, nous considérerons une liste chaînée non triée.

Comment ça marche : L'utilisateur donne l'élément de nœud qu'il faut trouver. Si on trouve l'élément, on renvoie vrai, sinon on renvoie faux, vous pouvez également utiliser un compteur et renvoyer l'index de l'élément ; (si cela existe).

Algorithme

1. Réglez le pointeur curr sur la tête

2. Comparez curr.data avec la valeur d'entrée :

Quantity Si égal, retournez True

greep Sinon, passez au pointeur suivant

3 Répétez les étapes 1-2 jusqu'à ce que l'élément soit trouvé ou la fin de la liste chaînée

.

Code d'implémentation :

def findNode(self,value):
       curr = self.head
       while curr:
           if curr.getData() == value:
               return True
           curr = curr.getNextNode()
       return False

Comment supprimer un nœud d'une liste à chaînage unique ? À partir de l'exemple ci-dessus, nous savons comment trouver des nœuds, nous pouvons ensuite l'utiliser pour supprimer des nœuds. Nous pouvons obtenir une valeur de l'utilisateur, rechercher l'élément dans la liste chaînée et le supprimer s'il existe.

Remarque : Il est très important d'indiquer à l'utilisateur si l'élément a été supprimé avec succès. Par conséquent, il renvoie True lorsque la suppression est réussie, sinon il renvoie False, n'oubliez pas de décrémenter l'attribut size de 1 ;

Appelons le nœud à supprimer le nœud actuel. L’idée est de relier le nœud suivant du nœud précédent au nœud suivant du nœud actuel. Par exemple, disons que nous voulons supprimer 4 de la liste chaînée donnée :

Nous devons faire pointer le nœud suivant de 3 vers le nœud suivant de 4, qui est 5.
原链表: H-->3-->4-->5 
删除4后:H-->3-->5

Supposons que nous supprimions également 3

Remarque : pour établir une connexion entre le nœud précédent et le nœud suivant du nœud actuel, assurez-vous de garder une trace du nœud précédent.
删除3后:H-->5

Algorithme

1 Il y a deux pointeurs :

Quantity CURR - initialement attribué à l'en-tête

Quantityprev - initialement. pointé vers Aucun

2. Si la valeur d'entrée correspond aux données de curr, vérifiez l'existence de prev :

● Si c'est le cas, définissez le nœud suivant de prev sur le nœud suivant de curr

● Sinon, pointez simplement la tête vers le nœud suivant de curr (cela se produit lorsque vous souhaitez supprimer le premier nœud)

● Décrémentez l'attribut size de 1

● Return True

3. Si la valeur d'entrée ne correspond pas aux données de curr, passez au nœud suivant de la manière suivante :

● Pointez sur la courbe précédente

● Pointez CURR vers le nœud suivant CURR

4. Répétez les étapes 1 à 3 jusqu'à la fin de la liste chaînée

5 Si la fin de la liste chaînée est atteinte, False est renvoyé. , indiquant qu'il n'y a aucun élément dans la liste chaînée avec La valeur d'entrée correspond au

code d'implémentation :

Recommandation du didacticiel vidéo associé : "
def removeNode(self,value):
        prev = None
        curr = self.head
        while curr:
            if curr.getData() == value:
                if prev:
                    prev.setNextNode(curr.getNextNode())
                else:
                    self.head = curr.getNextNode()
                return True
                    
            prev = curr
            curr = curr.getNextNode()
            
        return False
python3 tutoriel

" et plus C'est tout le contenu de cet article, j'espère qu'il sera utile à l'étude de chacun. Pour un contenu plus passionnant, vous pouvez prêter attention aux colonnes de didacticiels pertinentes du site Web PHP chinois ! ! !

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn