Gibt es eine Möglichkeit zu überprüfen, ob eine Single-Linked-Liste Zyklen für lineare Zeit enthält, ohne die Liste zu kopieren und zu ändern?Test einzelne verkettete Liste für Zyklus
Ich dachte, wir könnten versuchen, diese Liste topologisch zu sortieren. Wenn nicht, gibt es einen kleinen Zyklus ... Aber es scheint, dass es nicht funktionieren wird.
Verwenden klassische Lösungen mit schnellen und langsamen Iterator. Es kann Ihnen sogar sagen, wo die Schleife beginnt – teivaz
Sie könnten ein dfs tun und wenn Sie einen besuchten Knoten erreichen, dann ist es entweder eine Kreuzkante oder eine Hinterkante. Um Rückflanken zu unterscheiden, verwenden Sie "Farben", um zu bestimmen, ob Sie gerade einen Knoten bearbeiten (rekursiv für seine untergeordneten Elemente) oder die Verarbeitung abgeschlossen haben, um ihn erneut auszuführen). Dann sind alle hinteren Kanten Zyklen. –
Mögliches Duplikat von [Wie erkenne ich eine Schleife in einer verknüpften Liste?] (Http://stackoverflow.com/questions/2663115/how-to-detect-a-loop-in-a-linked-list) –