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