Scrivere una funzione che prese in input una lista di
interi ed un intero k, elimini dalla lista tutte le occorenze di k,
 
#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 del);
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, del);
    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 ogni k
void cancella(L_PTR * L, int val)
{
L_PTR tempPtr;
if (*L==NULL) return;
else if (((*L)->elem)==val)
{
tempPtr=*L; 
*L=(*L)->next;
free(tempPtr);
cancella(L,val);
}
else cancella(&((*L)->next),val);
}*/
L_PTR cancella(L_PTR L, int val)
{
    if (L==NULL) return NULL;
    if (L->elem==val)
    {
        L=cancella(L->next,val);
        return L;    
    }else
    {
    L->next=cancella(L->next,val);
    return L;
    }    
}
Ricerca appunti sul web
 
  
    Ricerca personalizzata
  
sabato 28 febbraio 2009
Sorgenti c : Elimina elemento in una lista ( tutte le occorrenze )
Pubblicato da
Baiox
alle
00:43
        
 
 
Etichette: Informatica, Programmazione C
Iscriviti a:
Commenti sul post (Atom)
0 commenti:
Posta un commento