Visualizzazione dei risultati da 1 a 2 su 2

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2016
    Messaggi
    6

    [C] Problema creazione liste concatenate semplici

    Salve a tutti ,avrei bisogno di una mano per capire un problema. Sto scrivendo un programma per capire la logica delle liste in C (visto che è un argomento appena trattato a lezione). Questo programma deve semplicemente creare una lista concatenata semplice, aggiungendo in coda degli int che introduco da tastiera. L'unica cosa che non riesco, credo, a far funzionare è l'aggancio del nodo precedente a quello successivo appena creato.
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    
    
    
    typedef struct nodo {
        int val;
        struct nodo *next;
    }n, *pt_n;
    
    
    pt_n newNode (int d, pt_n next);
    pt_n insert (pt_n testa,int val);
    
    
    /************************************************/
    
    
    int main(int argc, const char * argv[]) {
        int val=0, i=0;
        pt_n testa=NULL;
        pt_n leggi=NULL;
        while (i<6) {
            printf("Inserisci Valore ");
            scanf("%d",&val);
            testa=insert(testa,val);
            i++;
        }
        
        for (leggi=testa; leggi!=NULL; leggi=leggi->next) {
            printf("Stampa lista %d\n", leggi->val);
        }
        
        return 0;
    }
    
    
    /************************************************/
    
    
    pt_n newNode (int r, pt_n next) {
        pt_n x=malloc(sizeof(x));
    
    
        
        if (x==NULL)
            return NULL;
        else {
            
            x->val = r;
            printf("- valore nel nodo %d\n", r);
            x->next = next;
        }
        
        return x;
    };
    
    
    /************************************************/
    
    
    pt_n insert (pt_n testa, int val) {
        pt_n tmp;
    
    
       
        if (testa==NULL) {
            return newNode(val, NULL);
        } else {
           
        for (tmp=testa; tmp->next!=NULL; tmp=tmp->next){
          
            tmp->next = newNode(val, NULL);
            
        }}
      return testa;
    };
    Non riesco a vedere l'errore; in pratica crea il nodo in testa alla lista, infatti stampa il primo valore, ma a quanto pare non collega gli altri nodi successivamente creati. C'è qualche problema nel for della funzione 'insert', dove dorebbe avvenire il collegamento del nodo.
    Grazie in anticipo.

  2. #2
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    Ciao

    Ciao, secondo me ci sono alcuni errori logici, te li commento nel codice


    codice:
    pt_n newNode (int r, pt_n next){
        pt_n x=malloc(sizeof(x));// x è un puntatore a struct, secondo me dovrebbe essere 
    
                                 // pt_n x=malloc(sizeof(n)); dimensione della struct n
        
        if(x==NULL)
            return NULL;
        else{
            
            x->val = r;
            printf("- valore nel nodo %d\n", r);
            x->next=next;
        }
        
        return x;
    };
    
    
    /************************************************/
    
    
    pt_n insert (pt_n testa,int val){
        pt_n tmp;
    
    
       
        if(testa==NULL){
            return newNode(val, NULL);
        }else{
           
        for(tmp=testa; tmp->next!=NULL; tmp=tmp->next){ // qui il primo nodo gli metti newNode e si ferma
                                                         //troncando la lista visto che next è NULL, perdi i 
    
                                                          //  riferimenti agli altri nodi 
            tmp->next= newNode(val, NULL);
            
        }}
    
        /* dovresti scorrere la lista fino all'ultimo nodo e poi inserire in nuovo nodo
     
             for (tmp=testa; tmp->next!=NULL; tmp=tmp->next); scorre tutta la lista notare il punto e virgola
    
            tmp->next= newNode(val, NULL); aggiune il nuovo nodo */
      return testa;
    };
    P.S. con inserimento in coda non avresti bisogno di restituire il puntatore alla testa, visto che non viene modificato.
    Ultima modifica di torn24; 17-11-2016 a 11:43
    Tecnologia

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.