/*
    Serie di funzioni, che vengono definite ricorsivamente per
    effettuare delle operazioni su delle liste di strutture "Nodo"

    "inserisci_Nodo" inserisce l'elemento "el" nella lista "lista"
    alla posizione "pos"

    "stampa" ovviamente stampa una lista
    
    "merge" fonde due liste ordinate ottenendo una nuova lista
    ordinata (agendo solo sui puntatori, gli elementi della nuova
    lista continuano ad essere quelli delle liste originarie)
*/



typedef struct nodo{
    int val;
    struct nodo *next;
} Nodo;

Nodo *inserisci_Nodo (Nodo *el, Nodo *lista, int pos) {


    if (lista == NULL || pos == 0) {
        el->next = lista;  /* corretto */
        return el;
    }

    lista->next = inserisci_Nodo(el, lista->next, pos-1);

    return lista;
}


void stampa (Nodo *lista) {

    if (lista) {
        printf("%d\n",lista->val);
        stampa(lista->next);
    }
}


Nodo *merge (Nodo *lista1, Nodo *lista2) {

    if (!lista1) return lista2;
    if (!lista2) return lista1;

    if (lista1->val < lista2->val){
        lista1->next = merge (lista1->next, lista2);
        return lista1;
    }
    else {
        lista2->next = merge(lista1, lista2->next);
        return lista2;
    }
}



-- ArcangeloTripi - 06 Dec 2002

Edit | Attach | Watch | Print version | History: r4 < r3 < r2 < r1 | Backlinks | Raw View | Raw edit | More topic actions
Topic revision: r4 - 2003-10-04 - AndreaSterbini






 
Questo sito usa cookies, usandolo ne accettate la presenza. (CookiePolicy)
Torna al Dipartimento di Informatica
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2024 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback