Supposons que vous ayez une structure de liste liée en Java. Il est composé de nœuds:
class Node {
Node next;
// some user data
}
et chaque nœud pointe vers le nœud suivant, à l'exception du dernier nœud, qui a la valeur null pour le suivant. Supposons qu'il existe une possibilité que la liste contienne une boucle - c'est-à-dire que le nœud final, au lieu d'avoir un null, a une référence à l'un des nœuds de la liste qui l'a précédé.
Quelle est la meilleure façon d'écrire
boolean hasLoop(Node first)
qui retournerait true
si le nœud donné est le premier d'une liste avec une boucle, et false
sinon? Comment pourriez-vous écrire pour que cela prenne un espace constant et un temps raisonnable?
Voici une image de ce à quoi ressemble une liste avec une boucle:
finite amount of space and a reasonable amount of time?
:)