Scrivere una funzione che prese in input una lista di
interi ed un intero k, elimini dalla lista la prima occorenza di k, se `e presente. 
 
#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 val);
int main()
{
    L_PTR startPtr = NULL;
    int k=0;
    int val=0;
    int del=0;
    scanf("%d",&k); /*primo numero*/
    //if (k==0) return 0;
    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 la prima occorenza del numero*/
/*pre: la lista non è vuota*/
L_PTR cancella(L_PTR L, int val)
{
 L_PTR prev,curr,tempPtr;
 if (val==L->elem){
  tempPtr=L;
  L=L->next;
  free(tempPtr);
  return L;
 }
 else{
  prev=L;
  curr=L->next;
  while ((curr!= NULL) && (curr->elem != val)){
   prev=curr;
   curr=curr->next;
  }
  if (curr != NULL){
   tempPtr=curr;
   prev->next=curr->next;
   free(tempPtr);
   return L;
  }
  return L;
 }
}
Ricerca appunti sul web
 
  
    Ricerca personalizzata
  
sabato 28 febbraio 2009
Sorgenti c : Elimina elemento in una lista
Pubblicato da
Baiox
alle
00:42
        
 
 
Etichette: Informatica, Programmazione C
Iscriviti a:
Commenti sul post (Atom)
0 commenti:
Posta un commento