Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [C] Ricorsione e posizioni pari

    Ciao a tutti

    devo fare una funzione ricorsiva che prende in input una lista concatenata e restituisce la lista senza gli elementi in posizione pari.

    sapete come si fa?

  2. #2
    Utente di HTML.it L'avatar di infinitejustice
    Registrato dal
    Nov 2001
    residenza
    Barcelona
    Messaggi
    772
    struct foo * kill(struct foo *current){

    if(current != NULL){
    current->next = current->next->next;
    kill(current->next);
    }

    return current;
    }


    La funzione la invochi passandole il primo elemento della lista
    ex. first = kill(first);

    Gli elementi nn vengono eliminati fisicamente, ma solo tolti dalla lista. Basta inserirgli il free...

    Live fast. Troll hard.
    Pythonist | Djangonaut | Puppeteer | DevOps | OpenStacker | Lost in malloc
    Team Lead @Gameloft Barcelona

  3. #3
    grazie amico funziona bene.

    io sono riuscito a fare questa versione

    LIST togli_pari(LIST L)
    {
    LIST pnode;
    if (L == NULL)
    return L;
    else
    {
    pnode = L->next;
    L->next = togli_pari(pnode->next);
    return L;
    }
    }

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2005
    Messaggi
    117
    codice:
    if(current != NULL){ 
    current->next = current->next->next; 
    kill(current->next); 
    } 
    
    return current; 
    }
    In questa c'è un problema, current->next potrebbe essere NULL e quindi non ha senzo current->next->next;

    codice:
    LIST togli_pari(LIST L) 
    { 
    LIST pnode; 
    if (L == NULL) 
    return L; 
    else 
    { 
    pnode = L->next; 
    L->next = togli_pari(pnode->next); 
    return L; 
    } 
    }
    lo stesso vale anke qui... pnode potrebbe essere NULL e quindi non ha senza pnode->next

    e cmq in entrambi c'è molto garbage (memoria non liberata)...

    codice:
    if(current != NULL){
       if (current->next != NULL)
       {
          aux = current->next;
          current->next = current->next->next; 
          free(aux);
       }
       kill(current->next); 
    } 
    
    return current; 
    }
    codice:
    LIST togli_pari(LIST L) 
    { 
       LIST pnode; 
       if (L != NULL) 
       { 
          pnode = L->next; 
          if (pnode != NULL)
             L->next = togli_pari(pnode->next);
          else
             L->next = NULL;
          free(pnode);
       } 
       return L; 
    }

  5. #5
    hai ragione amico la mia versione funziona solo con una lista che ha un numero di elementi pari, con una lista con numero di elementi dispari crasha.

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