[RISOLTO]Problema con gestione lista

di il
4 risposte

[RISOLTO]Problema con gestione lista

Siccome ho un altro problema rispetto all'argomento che ho aperto prima sulle librerie sto scrivendo un nuovo post (spero di non andare contro il regolamento)

Ho un problema su un esercizio sulle liste...non riesco ad aggiungere nodi alla mia lista e non riesco a capire il perchè.

Questo è il mio codice:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define N 10000

typedef struct list{
    char word[1024];
    struct list *next;
}list_l;

list_l *createList(){
    list_l *head=NULL;
	return head;
}

int destroyList(list_l *L){
    if(L==NULL){
        return -1;
    }
    while(L!=NULL){
        list_l *occ=L->next;
        free(L);
        L=occ;
    }
    return 0;
}

int insertList(list_l *L, const char *c){
	list_l *new=malloc(sizeof(list_l));
	strcpy(new->word,c);
	new->next=NULL;
	if(L==NULL){
		L=new;
        return 0;
    }
    list_l *occ=L;
    list_l *prev=NULL;
    while((strcmp(occ->word,c)>1) && (occ!=NULL)){
        prev=occ;
        occ=occ->next;
    }
    if(prev==NULL){
        new->next=L;
        L=new;
    }else if(occ==NULL){
		prev->next=new;
	}else{
        prev->next=new;
        new->next=occ;
    }
    return 0;
}

void printList(list_l *L){
    if(L==NULL){
        printf("LA LISTA E' VUOTA!!!!\n");
    }else{
        list_l *occ=L;
        while(occ!=NULL){
            printf("%s\n",occ->word);
            occ=occ->next;
        }
    }
}

int main(int argc,char *argv[]){
    FILE *in;
    list_l *list=createList();
    char *st,occ[N];
    int t;
    in=fopen(argv[1],"r");
    while(fgets(occ,N,in)!=NULL){
        st=strtok(occ," ");
        while(st){
            t=insertList(list,st);
            if(t!=0){
                printf("PAROLA NON INSERITA\n");
                return t;
            }
            st=strtok(NULL," ");
        }
    }
    printList(list);
    t=destroyList(list);
    return t;
}


quando eseguo il programma con un file di prova.txt mi dice che la lista è vuota al momento della printList...il problema come ho detto all'inizio dopo svariate prove è che non mi aggiunge i nodi alla lista....qualcuno sa aiutarmi?

4 Risposte

  • Re: [RISOLTO]Problema con gestione lista

    Devi passare un puntatore al puntatore a lista, in modo che la modifica del puntatore resti visibile quando esci dalla funzione.
  • Re: [RISOLTO]Problema con gestione lista

    Cioè come? Perché io avevo provato a passare come argomento sia *list che &list ma nel primo caso non mi fa compilare nemmeno mentre nel secondo non cambia nulla...mi puoi fare vedere dove sbaglio è come correggere?
  • Re: [RISOLTO]Problema con gestione lista

    maffo95 ha scritto:


    Cioè come? Perché io avevo provato a passare come argomento sia *list che &list ma nel primo caso non mi fa compilare nemmeno mentre nel secondo non cambia nulla...mi puoi fare vedere dove sbaglio è come correggere?
    E' corretto passare &list, solo che devi anche modificare il codice all'interno della funzione per dereferenziare il puntatore.

    Ovvero, passi un puntatore a puntatore, poi all'interno dereferenzi il parametro in modo da avere di nuovo solo un puntatore. IMPORTANTE: per dereferenziare intendo mettere sempre un * davanti al parametro (occhio alla precedenza degli operatori quando accedi a un campo della struct) ogni volta che lo usi, non assegnare il parametro dereferenziato a un'altra variabile.
  • Re: [RISOLTO]Problema con gestione lista

    Vai perfetto grazie della risposta aggiuntiva che mi hai dato ma avevo riflettuto meglio su quello che mi avevi detto e avevo già risolto mi sono dimenticato di dirlo
Devi accedere o registrarti per scrivere nel forum
4 risposte