Programme Python pour détecter les cycles dans la liste chaînée

王林
Libérer: 2023-09-06 17:05:08
avant
1336 Les gens l'ont consulté

Lorsqu'un nœud de la liste chaînée ne pointe pas vers NULL, on dit qu'il y a un cycle dans la liste chaînée. Le dernier nœud pointera vers le nœud précédent dans la liste chaînée, créant une boucle. Une liste chaînée circulaire n’a pas de point final.

Dans l'exemple ci-dessous, le dernier nœud (nœud 5) ne pointe pas vers NULL. Au lieu de cela, il pointe vers le nœud 3 et établit une boucle. Par conséquent, la liste ci-dessus est infinie.

Programme Python pour détecter les cycles dans la liste chaînée

Algorithme rapide et lent pour obtenir deux pointeurs

  • Les deux pointeurs pointeront initialement vers le HEAD de la liste chaînée.

  • Le pointeur lent augmente toujours de un et le pointeur rapide augmente toujours de deux.

  • A tout moment, si le pointeur rapide et le pointeur lent pointent vers le même nœud, la liste chaînée est dite avoir un cycle.

Considérez l'exemple de liste chaînée suivant où le dernier nœud pointe vers le deuxième nœud -

Exemple

Le pointeur lent et le pointeur rapide pointent tous deux vers le même nœud. Par conséquent, on peut conclure que la liste chaînée donnée contient un cycle.

class Node:
    def __init__(self, val):
        self.val = val
        self.next = None


class LinkedList:
    def __init__(self):
        self.head = None

    def insert_at_the_end(self,newVal):
        newNode=Node(newVal)
        if self.head==None:
            self.head=newNode
            return
        temp=self.head
        while(temp.next):
            temp=temp.next
        temp.next=newNode


    def Print_the_LL(self):
        temp = self.head
        if(temp != None):
          print("\nThe linked list elements are:", end=" ")
          while (temp != None):
            print(temp.val, end=" ")
            temp = temp.next
        else:
          print("The list is empty.")
    def detect_loop(self):
        slow=self.head
        fast=self.head
        while(fast):
            if slow==fast:
                print("\nA loop has been detected in the linked list ")
                return
            slow=slow.next
            fast=fast.next


newList = LinkedList()
newList.insert_at_the_end(1)
newList.insert_at_the_end(2)
newList.insert_at_the_end(3)
newList.insert_at_the_end(4)
newList.Print_the_LL()
print("\n")
newList.head.next.next.next.next=newList.head.next
newList.detect_loop()
Copier après la connexion

Sortie

Un cycle a été détecté dans la liste chaînée.

The linked list elements are: 1 2 3 4 

A loop has been detected in the linked list
Copier après la connexion

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!

Étiquettes associées:
source:tutorialspoint.com
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!