Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 14 su 14
  1. #11
    Originariamente inviato da ant_alt
    grazie

    quindi il problema era solo nel while?
    codice:
    while(corrente->next!=NULL && valore<corrente->val)
    o mi è sfuggito altro?
    Si, ti è sfuggito qualcos'altro
    codice:
          if(precedente==NULL){
          nuovo=*L;
          nuovo->next==NULL;
          }
          else{
    codice:
    	if(NULL==precedente)
    	{
    		nuovo->next = *L; /* nuovo->next==NULL; */
    		*L = nuovo;
    	}
    	else
    	{
    Assegnavi a nuovo il valore iniziale di *L (NULL)
    Invece per sostituire il primo elemento della lista *L lo devi assegnare a nuovo->next
    Ovviamente diventerà nuovo il primo elemento della lista.
    Originariamente inviato da ant_alt
    altra cosa: nella tua funzione visualizza passi come argomento puntatore a nodo (che secondo la mia typedef sarebbe "lista")
    perchè poi si usa L->val?? cioè a me sembra che tu abbia usato due operatori di risoluzione (prima il puntatore a nodo e poi ->)
    Di fatto con
    visualizza( concat );
    passo alla funzione visualizza il suo valore, non il suo puntatore (manca il &) quindi un puntatore Nodo *L semplice.
    ...perchè mai funziona?
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  2. #12
    Utente bannato
    Registrato dal
    Feb 2004
    Messaggi
    2,803
    Originariamente inviato da Samuele_70
    codice:
    	if(NULL==precedente)
    	{
    		nuovo->next = *L; /* nuovo->next==NULL; */
    		*L = nuovo;
    	}
    	else
    	{

    infatti sul libro è scritto come fai fatto, giustamente
    ..a proposito,mica c'è differenza tra if(NULL==precedente) e if(precedente==NULL)?

    xò capisci che un senso logico la mia soluzione l'aveva

    entro in questo IF quando non ci sono altri nodi, giusto?
    assegno quindi a nuovo->next NULL, in quanto non ci sono altri nodi..e a nuovo l'indirizzo passato da *L.
    A questo punto ho capito che così è sbagliato..xò come hai fatto tu, avendo "nuovo" come unico nodo della lista, nuovo->next, punta a "nuovo"..facendo una specie di ciclo :master:

  3. #13
    Originariamente inviato da ant_alt
    ..a proposito,mica c'è differenza tra if(NULL==precedente) e if(precedente==NULL)?
    E' un piccolo accorgimento che permette di evitare l'errore di digitazione "=" invece di "=="
    Se nella if scrivi :
    if(precedente=NULL)
    (assegni a precedente il valore NULL, invece di effettuare un controllo)
    è un errore di tipo logico ed il compilatore non avrà nulla da obiettare
    invece se per errore scrivi
    if(NULL=precedente)
    il compilatore si farà sentire eccome , dato che non si può assegnare un valore ad una costante (in realtà è una define, ma il discorso non cambia)

    Originariamente inviato da ant_alt
    xò capisci che un senso logico la mia soluzione l'aveva

    entro in questo IF quando non ci sono altri nodi, giusto?
    Si
    Originariamente inviato da ant_alt
    assegno quindi a nuovo->next NULL, in quanto non ci sono altri nodi..e a nuovo l'indirizzo passato da *L.
    A questo punto ho capito che così è sbagliato..xò come hai fatto tu, avendo "nuovo" come unico nodo della lista, nuovo->next, punta a "nuovo"..facendo una specie di ciclo :master:
    Esatto io ho messo
    nuovo->next = *L;
    ma è la stessa cosa, avresti potuto tranquillamente scrivere anche
    nuovo->next = NULL;
    in questo caso non cambiava nulla.
    Ma il problema era
    nuovo=*L;
    con questa riga di codice perdevi il riferimento al nodo creato, dato che gli assegavi il valore di *L (che qui vale NULL)
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  4. #14
    Utente bannato
    Registrato dal
    Feb 2004
    Messaggi
    2,803
    credo di aver capito quasi tutto...il problema è che tra capire il codice e saperlo scrivere senza il minimo dubbio ci sono anni luce di distanza


    ad esempio nella tua funzione visualizza viene richiamata per valore come hai detto, ma il prototipo ha come argomento un puntatore a nodo :master:

    vuol dire che funzioni che prendono come argomento una struct hanno sempre (come argomento) puntatori a struct, ma poi il passaggio per valore o per riferimento dipende esclusivamente da come richiami la funzione(con o senza &)? mentre nel corpo della funzione l'unica differenza è che la chiamata per riferimento vuole *struct mentre per valore la struct?


    mi sono spiegato da cani ma spero che tu capisca

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 © 2026 vBulletin Solutions, Inc. All rights reserved.