Ciao a tutti
Devo realizzare una coda che ha due metodi, uno (leggi) che riceve una sequenza di numeri interi (finché l'utente non ne inserisce uno negativo) e costruisce una lista, restituendo il puntatore alla testa.
L'altro metodo (inserisci ) inserisce nella lista un nuovo elemento x, mantenendo l'ordinamento e ritorna il puntatore al nodo inserito (da fare ricorsivamente).

Questa è la lista:
codice:
typedef struct nodo *lista;
struct nodo {
int x; /* Informazione. */
lista next; /* Puntatore al nodo successivo */
};
L'inserisci, che inserisce un nuovo elemento in ordine:
codice:
lista inserisci(lista *punt_lista, int x) {
      lista temp;
      if(*punt_lista == NULL || (*punt_lista)->x >=x){
                     
         temp = (lista)malloc(sizeof(struct nodo));
         temp->x = x;
         temp->next= *punt_lista; 
         
      }
      else 
         inserisci(&temp->next, x);
      return temp;

      
      }
Del codice qui sopra mi sembra manchi l'istruzione che dice all'elemento precedente a quello inserito di puntare a temp, cioé inserisco temp ma non viene "agganciato alla coda"..ma non capisco come fare!

codice:
lista leggi(void) {
      lista punt_lista;
      lista temp;
      
      int n;
      printf("Immetti una sequenza di interi terminata da un numero negativo: ");
      do{
        
         scanf("%d",&n);
         
         if(n>=0){
                              
                temp=(lista)malloc(sizeof(struct nodo));
                if(!temp)
                {
                   printf("Allocazione memoria non riuscita");
                   return NULL;
                }
                else{
                     
                 inserisci(&(temp->next),n);
                
                 punt_lista=temp;
                 free(temp);
                 }
        }

         
      }while(n>=0);
        return punt_lista;
Io passerei per argomento a di inserisci(&punt_lista,n); ,ovvero la lista che sto creando.. ma mi dà errore!!

edit: metto anche il main:
codice:
#include <stdio.h>
lista leggi(void);
int main(void)
{
lista L[5];
L[0]=leggi();
L[1]=leggi();
printf("\nL1=");
stampa(L[0]);
printf("\nL2=");
stampa(L[1]);
system("PAUSE");
return 0;
}
Anche se non scrivete il codice da modificare vi prego di spiegarmi cosa sbaglio! Grazie!
Ho cercato nel forum ma non ho trovato nulla di simile