Y a-t-il un moyen d'inverser la liste liée sans utiliser la variable Temp dans C? Merci d'avance.
L'approche célèbre: p> utilise la variable TEMP p> Saurabh p> p> P>
4 Réponses :
Utilisez XOR-Swaps sur les pointeurs pour simuler un liste liée XOR. p>
la mise en œuvre est laissée au lecteur comme un exercice. em> p>
Notez que votre utilisation vous pouvez Swap sans Temps à l'aide de Xor, il s'appelle XOR Swap . P> P> TEMP code> génère réellement deux appels code> swap () code> et peut être remplacé par:
Approche récursive:
Element *revLinkListHead; reverse(head, &revLinkListHead);
Si quelqu'un est toujours intéressé, voici la solution qui n'utilise pas de nouvelles variables, à l'exception de ceux qui sont passés dans un appel récursif.
public static List invert(List l) { invert(l.next, l, l); l = l.next; breakCycle(l, l); return l; } private static void invert(List l, List toBeNext, List first) { if(l.next == null) { l.next = toBeNext; first.next = l; } else { invert(l.next, l, first); l.next = toBeNext; } } private static void breakCycle(List l, List first) { if(l.next == first) { l.next = null; } else { breakCycle(l.next, first); } }
Récursion est une triche car les paramètres sont essentiellement des variables temporaires.
D'accord, mais c'est généralement le genre de questions semi-stillantes comme celle-ci.
C'est le genre de quibning sémantique utilisé par les participants qui ne sont pas au courant de la vraie réponse. : P
Souhaitez-vous s'il vous plaît me dire la manière récursive.
Il y a quelques questions similaires à celles qui y sont déjà: Stackoverflow.com/Questtions/4078864/Reversing-linked-list < / a> et