AleksandarArkan

L - inverti lista

May 14th, 2015
206
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.98 KB | None | 0 0
  1. //funziona
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5.  
  6.  struct elemento {
  7.      int num;
  8.      struct elemento *next;
  9.      };
  10.      
  11. //funzione uno crea lista con una seq di interi in input
  12.  
  13. struct elemento *creaListaSeq(){
  14.     int numero;
  15.     struct elemento *primo=NULL;
  16.     struct elemento *puntatore;
  17.    
  18.     printf("Inserisci il primo numero:\n");
  19.     scanf("%d",&numero);
  20.    
  21.     //se ha inserito zero termina subito
  22.     if(numero==0)
  23.         return primo;
  24.    
  25.     if(numero!=0){
  26.         primo=malloc(sizeof(struct elemento));
  27.         primo->num=numero;
  28.         }
  29.     puntatore=primo;
  30.     //ora faccio gli altri elementi
  31.     //lettura del prosssimo numero
  32.     printf("Inserisci il numero:\n");
  33.     scanf("%d",&numero);
  34.    
  35.     while(numero!=0){
  36.         puntatore->next=malloc(sizeof(struct elemento));
  37.         puntatore=puntatore->next;
  38.         puntatore->num=numero;
  39.         printf("Inserisci il numero:\n");
  40.         scanf("%d",&numero);
  41.         }
  42.     puntatore->next=NULL;
  43.    
  44.     return primo;
  45.     }
  46.  
  47.  
  48. int lunghezza(struct elemento **lista){
  49.     int contatore=0;
  50.     while(*lista!=NULL){
  51.         contatore++;
  52.         (*lista)=(*lista)->next;
  53.         }
  54.     return contatore;
  55.     }
  56.  
  57. void inserisciTesta(struct elemento **lista, int el){
  58.     struct elemento *scorri;
  59.     scorri=*lista;
  60.    
  61.     struct elemento *nuovo;
  62.     nuovo=malloc(sizeof(struct elemento));
  63.     nuovo->num=el;
  64.    
  65.     //caso lista vuota
  66.     if(scorri==NULL){
  67.         *lista=nuovo;
  68.         nuovo->next=NULL;
  69.         return;
  70.     }
  71.     //caso la lista non e' vuota
  72.     nuovo->next=*lista;
  73.     *lista=nuovo;
  74.     return;
  75. }
  76.  
  77.  
  78.  
  79. void inverti(struct elemento **lista){
  80.     struct elemento *scorri;
  81.     scorri=*lista;
  82.     int elementi=lunghezza(lista);
  83.     int contatore=0;
  84.    
  85.     while(contatore<elementi){
  86.         inserisciTesta(lista,scorri->num);
  87.         scorri=scorri->next;
  88.         contatore++;
  89.         }
  90.     }
  91.  
  92. void print(struct elemento *lista){
  93.     if(lista==NULL)
  94.         return;
  95.     else
  96.         printf("%d ", lista->num);
  97.         print(lista->next);
  98.     }
  99.    
  100.    
  101.  
  102. int main(){
  103.     struct elemento *lista;
  104.     lista=creaListaSeq();
  105.     print(lista);
  106.     inverti(&lista);
  107.     printf("\n");
  108.     print(lista);
  109.    
  110.     return 0;
  111. }
Advertisement
Add Comment
Please, Sign In to add comment