Newsgroup: it.comp.lang.c
Titolo: Un aiuto sulle liste grazie

Sono alle prime armi con il C, ed ho un problema che mi ha messo in stallo.
Il problema è che dovrei aquisire n stringhe con una lista a concatenamento
semplice.
Ho sviluppato il codice di inserimento dei nodi ma il problema che mi ha
messo in stallo è l'eliminazione dei nodi.
Ringrazio infinitamente per un aiuto a superare lo stallo in cui mi sono
messo.
Questo è il codice che ho sviluppato:
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
typedef struct Lista *Nodo;
 typedef struct Lista{
    char dato[30];
      Nodo next;
      }pippo;
void inserisci(Nodo *Testa);
char cancella(Nodo *);
char controlla(Nodo);
void visualizza(Nodo Testa);
void messaggio(void);
main()
{
 Nodo Testa = NULL;
   char scelta[80];
 do {
    puts("\n\n\t 1 - Inserisci Nodo"
        "\n\n\t 2 - Cancella un numero dalla lista."
        "\n\n\t 3 - Visualizza Lista"
        "\n\n\t 5 - Esci"
        "\n\n\nScegli una opzione:(1 - 2 - 5)");
      gets(scelta);
      clrscr();
      printf("%d corrisponde al carattere :",atoi(scelta));
      putch(atoi(scelta));
      printf("\n\n");
      switch(atoi(scelta))
      {
       case 1:
          puts("\nInserisci Nodo\n\n");
            inserisci(&Testa);
            break;
         case 2:
          if(Testa == NULL) {
            messaggio();
           }
          else if(!controlla(Testa)) {
             puts("\n\nCancella un numero dalla lista: ");
                  gets(Testa->dato);
                    //strcpy(r,s)
                     if(cancella(&Testa)){
                    printf("\n%s cancellato.\n",cancella(&Testa));
                  //getch();
                      }
              else
               printf("\n%s non e' nella lista.\n\n",cancella(&Testa));
                 //getch();
               }
                  else
             printf("\nLa lista e' vuota.\n\n");
               break;
         case 3:
          printf("\nVisualizza Lista\n\n");
            visualizza(Testa);
            break;
         case 5:
          printf("\nArrivederci\n\n");
            break;
         default:
          printf("\nScelta non corretta!\n\n");
            }
      }while(atoi(scelta)!=5);
}
void inserisci(Nodo *Testa)
{
 Nodo corrente =new(Lista);
   char valore[30];
    if(corrente!=NULL) {
     printf("\nInserisci una stringa :");
       gets(valore);
       strcpy(corrente->dato,valore);
       corrente->next=*Testa;
       *Testa=corrente;
       }
      return;
}
char cancella(Nodo *Canc)
{
 char val[30];
 Nodo succ,corr,pross;
   if(val==(*Canc)->dato){
    succ = *Canc;
      *Canc = (*Canc)->next;
      free(succ);
      return (*val);
   }
   else {
    pross = *Canc;
      corr = (*Canc)->next;
   while( corr != NULL && corr->dato != val) {
    pross = corr;
      corr = corr->next;
      }
    if(corr != NULL){
       succ = corr;
         pross->next = corr->next;
         free(succ);
         return (*val);
         }
      }
      return '\0';
}
char controlla(Nodo Controllo)
{
 return Controllo == NULL;
}
/*void stampa(Nodo visualizza)
{
 if(visualizza==NULL)
    printf("\n\nLa lista e' vuota.\n\n");
   else {
       printf("\nLa lista e' :\n\n");
   while(visualizza!=NULL) {
    printf("%s --> " ,visualizza->a);
      visualizza=visualizza->next;
      }
      printf("NULL\n\n");
   }
}*/
void visualizza(Nodo Testa)
{
 Nodo corrente;
   //int i=1;
   if(Testa==NULL)
      printf("\nLista vuota");
    else {
       printf("\nLa lista e' :\n\n");
       corrente = Testa;
       while(corrente!=NULL){
       printf("%s -> " ,corrente->dato);
       corrente=corrente->next;
       //i++;
       }
    printf("NULL\n\n");
    }
   return;
}
void messaggio()
{
 puts("\n\nLa lista e' completamente vuota!");
   puts("\npremere un tasto per continuare...");
   getch();
   return;
}

 concatenamento semplice.
Ti ho risposto in it.comp.lang.c++
-- 
Remove _NOTRASH to answer me!