Problema liste

di il
4 risposte

Problema liste

C'è un problema nella funzione (void inserisci_dopo_nodo(int v, NODOPTR* lista)) e non riesco a capire il perchè...infatti se nel main non eseguo la funzione testa_lista=inizializza(3) prima di inserisci_dopo_nodo non mi stampa a schermo nulla...pero nella funzione ho gestito il caso del NODOPTR testa_lista NULL.

#include <stdio.h>
#include <stdlib.h>

struct nodo
{
 int numero;
 struct nodo* next;
};

typedef struct nodo NODO;
typedef NODO* NODOPTR;


NODOPTR inizializza(int v)
{
 NODOPTR n = (NODOPTR)malloc(sizeof(NODO));
 if(n==NULL)
 {
 	perror("malloc");
 	exit(EXIT_FAILURE);
 }
 n->numero = v;
 n->next = NULL;
 return n;
}

void inserisci_prima_nodo(int v,NODOPTR* lista)
{
 NODOPTR primo;
 NODOPTR nuovo=inizializza(v);
 primo=*lista;
 //inserisci in testa
 nuovo->next=primo;
 primo=nuovo;
}


void inserisci_dopo_nodo(int v, NODOPTR* lista)
{
 NODOPTR primo;
 NODOPTR nuovo=inizializza(v);
 primo=*lista;

if(primo==NULL){
primo=nuovo;
}
else{
 NODOPTR temp = primo;
 while((temp->next)!=NULL)
 {
 	temp=temp->next;
 }

 	temp->next=nuovo;
}}


void stampa(NODOPTR* lista)
{
 NODOPTR temp = *lista;
 while(temp!=NULL)
 {
 	printf("%d\n",temp->numero);
 	temp=temp->next;
 }
}


int main()
{

 NODOPTR testa_lista=NULL;
// testa_lista=inizializza(3);
 inserisci_dopo_nodo(1,&testa_lista);
 inserisci_dopo_nodo(2,&testa_lista);

 stampa(&testa_lista);

 return 0;
}

4 Risposte

  • Re: Problema liste

    1) scrivi in minuscolo
    2) inserisci i tag CODE per il codice
    3) rifai la domanda perché non si capisce
  • Re: Problema liste

    oregon ha scritto:


    1) scrivi in minuscolo
    2) inserisci i tag CODE per il codice
    3) rifai la domanda perché non si capisce
    fatto,spero di essere stato più chiaro
  • Re: Problema liste

    Adesso va meglio ... il problema è nella funzione che dovrebbe essere
    
    void inserisci_dopo_nodo(int v, NODOPTR* lista)
    {
    	NODOPTR nuovo=inizializza(v);
    
    	if(*lista==NULL)
    	{
    		*lista=nuovo;
    	}
    	else
    	{
    		NODOPTR temp = *lista;
    
    		while((temp->next)!=NULL)
    			temp=temp->next;
    		
    		temp->next=nuovo;
    	}
    }
    
  • Re: Problema liste

    Grazie mille,un'ultima cosa il motivo per il quale si passa alla funzione inserisci_coda anche il puntatore doppio NODOPTR* lista è legata al fatto che così terminata la funzione le modifiche effettuate valgano o anche per altri motivi che mi sfuggono?
Devi accedere o registrarti per scrivere nel forum
4 risposte