Raga mi sapete dire gli errori presenti nelle funzioni inseriscitesta e inseriscicoda? Vorrei imparare ad utilizzare il typedef (prima questo programma l'avevo scritto con i puntatori e funzionava alla perfezione) ma mi sfugge qualcosa... grazie in anticipo.

codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct numeri *nodo;
struct numeri{
       int elemento;
       nodo succ;
       };

void inseriscitesta(nodo il);
void stampalista (nodo il); 
void inseriscicoda(nodo il); 
void distruggilista(nodo il);
void ricerca(nodo il, int z);
void cancellanodo(nodo il, int l);
void inserimentoordinato(nodo il);
     
int main(int argc, char *argv[])
{
  int y;
  nodo il=NULL;
  il= malloc (sizeof (struct numeri));
  il->succ=NULL;
  printf ("Digita 1 per inserire un numero, altrimenti digita 0\n");
  scanf ("%d", &y);
  if (y==1)
  {printf ("Inserisci il nuemero:\n");
  scanf ("%d", &il->elemento);}
   
     inseriscitesta(il);
     stampalista (il);
     distruggilista (il);
     
     inserimentoordinato(il);
     stampalista(il);
     distruggilista (il);
     inseriscicoda (il);
     stampalista (il);
     
     int l;
     printf ("Inserisci il numero da cancellare\n");
     scanf ("%d", &l);
     cancellanodo (il, l);
     stampalista (il);
     inseriscicoda (il);
         
     int z;
     printf ("Inserisci il numero da cercare\n");
     scanf ("%d", &z);
     ricerca (il, z);
     
     
  
  system("PAUSE");	
  return 0;
}

void inseriscitesta(nodo il){
     int y;
     printf ("Digita 1 per inserire un numero, altrimenti digita 0\n");
     scanf ("%d",&y);
     while (y==1)
     {
     
     nodo p2 = NULL;
     p2= malloc (sizeof(struct numeri));
     p2->succ=NULL;
     printf ("Digita il numero da inserire:\n");
     scanf ("%d", &p2->elemento);
     p2->succ = il;
     il = p2;
     printf ("Digita 1 per inserire un numero, altrimenti digita 0\n");
     scanf ("%d",&y);}}

void stampalista (nodo il){
     while ( il!=NULL)
  {
    printf ("%d ---->", il->elemento);
    il=il->succ;}}
    
void inseriscicoda(nodo il){
     int m;
     printf ("\nDigita 1 per inserire un numero, altrimenti digita 0\n");
     scanf ("%d",&m);
     while (m==1)
     {
     if (il==NULL){
     nodo p2 = NULL;
     p2= malloc (sizeof(struct numeri));
     p2->succ=NULL;
     printf ("Digita il numero da inserire:\n");
     scanf ("%d", &p2->elemento);
     p2->succ = il;
     il = p2;}
           else
           {
                 nodo tm= il;
                 while (tm->succ!=NULL)
                       tm = tm->succ;
                       
               nodo nuovo= malloc(sizeof(struct numeri));
               printf("Digita il numero\n");
               scanf("%d", &nuovo->elemento);
               nuovo->succ=NULL;
               tm->succ=nuovo;}
               printf ("Digita 1 per inserire un numero, altrimenti digita 0\n");
     scanf ("%d",&m);}}
     
void distruggilista(nodo il){
     nodo tmp = NULL;
     while (il != NULL)
     {
           tmp= il->succ;
           free (il);
           il=tmp;}}
            
void ricerca (nodo il, int z){
      while (il != NULL && z!=il->elemento)
      il=il->succ;
      
      if (il->elemento==z)
      printf ("Il numero e' stato trovato\n");
      else printf ("Il numero non e' stato trovato\n");} 
       
void cancellanodo (nodo il, int l){
     nodo nodoprecedente;
     nodo nodocorrente;
     nodo nodotemporaneo;
     
     if (il->elemento == l){
                     nodotemporaneo = il;
                     il = il->succ;
                     free (nodotemporaneo);}
     else{
          nodoprecedente = NULL;
          nodocorrente = il;
          while(nodocorrente != NULL && nodocorrente->elemento != l){
                             nodoprecedente = nodocorrente;
                             nodocorrente = nodocorrente->succ;}
     
     if (nodocorrente != NULL) {
                      nodotemporaneo = nodocorrente;
                      nodoprecedente->succ = nodocorrente->succ;
                      free (nodotemporaneo);
                      }}}                       

void inserimentoordinato (nodo il){
    nodo nodoprecedente;
    nodo nodocorrente;
    nodo nuovonodo;
    int h;
    printf ("Digita 1 per inserire un numero o 0 per terminare\n");
    scanf ("%d", &h);
    while (h==1){
          int u;
          nuovonodo = malloc(sizeof(struct numeri));
          printf ("Digita il numero da inserire\n");
          scanf ("%d",&u);
          nuovonodo->elemento=u;
          
          nodoprecedente=NULL;
          nodocorrente=il;
          
          while(nodocorrente!=NULL && u > nodocorrente->elemento){
                                   nodoprecedente=nodocorrente;
                                   nodocorrente=nodocorrente->succ;}
          
          if (nodoprecedente == NULL){
                             nuovonodo->succ = il;
                             il=nuovonodo;}
          else {
               nodoprecedente->succ=nuovonodo;
               nuovonodo->succ=nodocorrente;}
          printf ("Digita 1 per inserire un numero o 0 per terminare\n");
          scanf ("%d", &h);}}