Scrivere una funzione che prese in input una lista di
interi, elimini dalla lista tutti i doppioni (lasciando le prime occorrenze), se presenti.
#include <stdio.h>
#include <stdlib.h>
struct nodo
{
int elem;
struct nodo * next;
};
typedef struct nodo L_ELEM;
typedef struct nodo * L_PTR;
void stampa_lista(L_PTR p);
L_PTR inserisci_in_testa(L_PTR l, int val);
L_PTR cancella(L_PTR L);
int main()
{
L_PTR startPtr = NULL;
int k=0;
int val=0;
int del=0;
scanf("%d",&k); /*primo numero*/
while(k>0) /* Inserisco in testa */
{
scanf("%d",&val);
startPtr = inserisci_in_testa(startPtr, val);
//printf("%d", &startPtr);
k--;
}
//printf("-%d-", startPtr->elem);
//scanf("%d", &del);
startPtr = cancella(startPtr);
stampa_lista(startPtr);
system("pause");
return 0;
}
void stampa_lista(L_PTR p) {
while (p != NULL) {
printf("%d ", p->elem);
p = p->next;
}
//printf("NULLn");
return;
}
/*inserisci un nuovo elemento in testa alla lista*/
L_PTR inserisci_in_testa(L_PTR L1, int val)
{
L_PTR temp_ptr;
temp_ptr=malloc(sizeof(L_ELEM));
temp_ptr->elem=val;
temp_ptr->next=L1;
L1=temp_ptr;
return L1;
}
/*cancella la prima occorenza del numero*/
/*pre: la lista non è vuota*/
L_PTR cancella(L_PTR L)
{
int val=0;
L_PTR prev,curr2,curr,tempPtr;
curr2=L;
while(curr2 != NULL)
{
curr=curr2->next;
val = curr2->elem;
prev=curr2;
//printf("val e' %dn",curr2->elem);
while(curr != NULL)
{
//printf("controllo val %d con %dn",val,curr->elem);
if (val==curr->elem){
tempPtr=curr;
//printf("ho cancellato %dn", curr->elem );
prev->next=curr->next;
curr=curr->next;
free(tempPtr);
}else
{
prev=curr;
curr=curr->next;
}
}
curr2=curr2->next;
}
return L;
}
Ricerca appunti sul web
Ricerca personalizzata
sabato 28 febbraio 2009
Sorgenti c : Elimina doppioni in una lista
Pubblicato da Baiox alle 00:46
Etichette: Informatica, Programmazione C
Iscriviti a:
Commenti sul post (Atom)
0 commenti:
Posta un commento