Dato un elenco piaciuto, vorrei scambiare ogni coppia di nodi come segue:
input : a-b-c-d-e-f-g
output : b-a-d-c-f-e-g
Se c'è un numero dispari di nodi, allora l'ultimo nodo viene virato così com'è. Questo dovrebbe essere fatto sul posto. Implementa il metodo: Node* SwapTo(Node* start)
Sto usando questa definizione di nodo:
class Node {
public:
char data;
Node* next;
};
Ecco la soluzione ricorsiva non ottimizzata:
Node* SwapTwo(Node* start) {
if (!start) {
return start;
}
Node* second = start->next;
if (!second) {
return start;
}
Node* third = second->next;
second->next = start;
start->next = SwapTwo(third);
return second;
}
Che cos'è la soluzione ricorsiva di coda?