Ho pensato a questa funzione per scambiare due nodi, ho considerato il caso in cui il nodo da scambiare è in testa e in coda:
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: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; } }
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"...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

Rispondi quotando
