Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #define LISTELEM 10 // Numero di elementi nella lista
- typedef struct stNodo // E' solo un esperimento, quindi...
- {
- struct stNodo * next;
- int payload;
- } nodo;
- nodo * lista; // Testa della lista
- // Creo la lista
- int fill(void)
- {
- int i; // Variabile di ciclo
- nodo * current; // Puntatore al nodo corrente
- nodo * tmp; // Puntatore al nodo creato
- for ( i = 0; i < LISTELEM; i++)
- {
- tmp = (nodo *) malloc(sizeof(nodo));
- if (tmp == NULL)
- {
- return -1;
- }
- tmp->next = NULL;
- tmp->payload = i;
- if (i == 0)
- {
- lista = tmp;
- current = lista;
- }
- else
- {
- current->next = tmp;
- current = tmp;
- }
- }
- return 0;
- }
- // Stampa la lista
- void stampa(void)
- {
- nodo * n;
- for (n = lista; n != NULL; n = n->next)
- printf("%d\n", n->payload);
- }
- // Percorre la lista rovesciando i puntatori
- // Al termine lista punterà all'ultimo elemento della lista
- // In effetti questa funzione risolve l'intero problema in meno di 20 righe.
- void reverse(void)
- {
- nodo * current;
- nodo * prev; // Alle fine del ciclo di inversione punterà all'ultimo elemento della lista
- nodo * next;
- // Percorro la lista fino alla fine invertendo i puntatori
- current = lista;
- prev = NULL;
- while (current != NULL)
- {
- printf("%d\n", current->payload);
- next = current->next; // Salvo il nodo successivo
- current->next = prev; // Inverto il puntatore
- prev = current; // Aggiorno prev
- current = next; // E current diventa il nodo salvato
- }
- lista = prev; // Al termine faccio puntare la testa della lista sll'ultimo elemento (che adesso è il primo)
- }
- int main(void)
- {
- int res;
- res = fill();
- if (res == -1)
- {
- return -1;
- }
- printf("La prima chiamata a reverse percorrerà la lista originale, stampandola in ordine diretto ed invertendola\n\n");
- reverse();
- printf("La seconda la percorrerà dalla coda verso la testa, stampandola in ordine inverso ed invertendola nuovamente \n\n");
- reverse();
- printf("Chiamo la funzione di stampa per verificare che tutto sia tornato in ordine.\n");
- stampa();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement