PDA

Visualizza la versione completa : liste in C


maldestro
16-12-2004, 18:52
Ciao ragazzi mi sapete dire come fare una funzione che mi inverte una lista?

esempio:

2->6->9->3->NULL

diventa:

3->9->6->2->NULL

grazie

tommisceddu
16-12-2004, 19:03
se vuoi utilizzare un array per memorizzare la lista semplice:
basta copiare l'elemento in posizione 'i' dell'array originale nella posizione 'MAX_SIZE_ARRAY-i-1' dove MAX_SIZE_ARRAY la dimensione massima dell'array, il tutto con una semplice for che va da 0 a MAX_SIZE_ARRAY.

altrimenti se vuoi utilizzare una lista dovrai invece scorrere la lista originale e aggiungere il contenuto di ogni elemento della lista alla seconda lista, pwer gli inserimenti deviono avvenire in testa in modo che lil primo elemento della lista originale risulta l'ultimo nella seconda lista e cos via ...

spero per te che conosca le liste :D altrimenti ...

:ciauz:

Ilmalcom
16-12-2004, 19:14
Originariamente inviato da maldestro
Ciao ragazzi mi sapete dire come fare una funzione che mi inverte una lista?

esempio:

2->6->9->3->NULL

diventa:

3->9->6->2->NULL

grazie
Single-linked o double-linked? Nel secondo caso pi semplice. Lista di interi o una lista generica di strutture? Prima bene se si chiarisce questo

maldestro
16-12-2004, 19:18
guarda io ho creato la funzione di inversione lista in questo modo. Dimmi se fa schifo o se pu andare:


Num *Reverse(struct numeri *testa)
{
struct numeri *aux, *x;
aux = testa;
x = aux;
testa = testa->next;
aux = testa;
testa = testa->next;
aux->next = x;
x->next = NULL;
while(testa->next != NULL){
x = aux;
aux = testa;
testa = testa->next;
aux->next = x;
}
testa->next = aux;
return testa;
}

calcola che testa era il puntatore al primo elemento della lista, e dopo questa funzione diventa il puntatore al primo elemento della lista rovesciata. non ho usato una seconda lista, ma ho solo invertito tutti i puntatori ->next

ti piace fatto cosi?

Loading