Originariamente inviato da Lasentinella
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
Uhm dando una rapida occhiata mi sembra che non metti mai a NULL l elemento next quando chiudi la lista....