Salve a tutti...
come ci si comporta con una pop di una lista doppia?
Per una lista semplice è ok, ma per una con doppi puntatori mi perdo subito...
Help me!
Salve a tutti...
come ci si comporta con una pop di una lista doppia?
Per una lista semplice è ok, ma per una con doppi puntatori mi perdo subito...
Help me!
Mostra dove ti perdi ... che ti ritroviamo ...
la lista doppia sarebbe l'equivalente di quella concatenata con la sola differenza che invece di puntare solo al successivo punta pure al precedente?
Prova a sviluparlo in questo modo (scusa l'orrendo codice):
Nodo
{
valore
back
next
}
sputa valore
tmp = testa
testa = testa->next
elimina tmp
testa->back = NULL
Experience is what you get when you don’t get what you want
allora io ho la mia bella pop...
Ma non so proprio come gestire il doppio puntatore, ossia i vari next e prev...Codice PHP:
void Pop
(
LIST **h,
LIST **n
)
{
LIST *testa;
/* Inizializzo testa con la testa corrente */
testa = *h;
if( testa != NULL )
{
*n = testa;
/* Aggiorno la testa corrente con il puntatore *
* all'elemento successivo */
*h = testa->Next;
/* Il successivo ora punta a NULL */
testa->Next = NULL;
}
}
Ma scusa la lista doppia
sarebbe l'equivalente di quella concatenata con la sola differenza che invece di puntare solo al successivo punta pure al precedente?
Experience is what you get when you don’t get what you want
SI!!!Originariamente inviato da Lak3d
la lista doppia sarebbe l'equivalente di quella concatenata con la sola differenza che invece di puntare solo al successivo punta pure al precedente?
e quindi:
sputa valore
tmp = testa->back
tmp1 = testa
testa = testa->next
elimina tmp1
testa->back = tmp
se non erro la pop è così
Experience is what you get when you don’t get what you want
Mi quoto da solo, infatti questa e' la mia pop per la lista semplice...ma non so come convertirla per le liste doppie...Originariamente inviato da Vincent
allora io ho la mia bella pop...
Ma non so proprio come gestire il doppio puntatore, ossia i vari next e prev...Codice PHP:
void Pop
(
LIST **h,
LIST **n
)
{
LIST *testa;
/* Inizializzo testa con la testa corrente */
testa = *h;
if( testa != NULL )
{
*n = testa;
/* Aggiorno la testa corrente con il puntatore *
* all'elemento successivo */
*h = testa->Next;
/* Il successivo ora punta a NULL */
testa->Next = NULL;
}
}
Su due piedi e senza aver mai trattato nel particolare funzioni di questo tipo..
bool Pop ( LIST **h, LIST **n)
{
LIST *testa;
LIST *tmp;
testa = *h;
if(( testa != NULL ) && (testa->next !=testa->next))
{
*n = testa;
*h = testa->Next;
tmp = testa->back;
tmp -> next = testa-> next;
tmp = testa->next;
tmp ->back = testa->back;
testa->back = NULL;
testa->Next = NULL;
}
else if (testa != NULL)
{
*n = testa;
*h = NULL;
}
else
return 0;
return 1;
}
Di sicuro può essere ottimizzato
Controlla potrei aver sbagliato...
Experience is what you get when you don’t get what you want