Ho pensato a questa funzione per scambiare due nodi, ho considerato il caso in cui il nodo da scambiare è in testa e in coda:
codice:
void swap(pNodo &lista)
{
if(lista->next != 0){
pNodo tmp = lista->next;
lista->next = tmp->next;
tmp->next = lista;
lista = tmp;
//delete tmp;
}
else{
pNodo tmp = lista->next;
tmp->next = lista;
lista->next = 0;
lista = tmp;
//delete tmp;
}
}
come vedete ho "annullato" "delete tmp", così lo scambio funziona, ma se ho capito bene mi ritroverei due puntatori che puntano all'elemento in testa (nel caso in cui lo scambio avviene tra i due puntatori in testa), così elimino tmp che mi serviva temporaneamente per lo scambio, ma quando vado a stampare la lista ecco cosa succede:
codice:
Inserisci elementi:
4
6
1
4
9
7
5
7
0
Elemento: 7 - Posizione: 8
Elemento: 5 - Posizione: 7
Elemento: 7 - Posizione: 6
Elemento: 9 - Posizione: 5
Elemento: 4 - Posizione: 4
Elemento: 1 - Posizione: 3
Elemento: 6 - Posizione: 2
Elemento: 4 - Posizione: 1
Elemento: 10490208 - Posizione: 10489888
Elemento: 7 - Posizione: 8
Elemento: 7 - Posizione: 6
Elemento: 9 - Posizione: 5
Elemento: 4 - Posizione: 4
Elemento: 1 - Posizione: 3
Elemento: 6 - Posizione: 2
Elemento: 4 - Posizione: 1
lo scambio lo fa, ho controllato anche passo la procedura stampando passo passo gli elementi a cui puntano i puntatori, però succede questo quando stampo la lista ed elimino "tmp"...