Scrivere una funzione che prese in input una lista di
interi ed un intero k, elimini dalla lista l’ultima 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;
 int k=1;
 int i=0;
 int k2=0;
 curr=L;
 while(curr != NULL)
 {
     if(curr->elem == val)
     {
         
         k2=k; /*trovo in che posizione si trova il numero da eliminare*/
         //printf("-%d-",k2);
     }
     prev=curr;
     curr=curr->next;
     k++;
     }
     if (k2!=0)
     {
     curr=L;  
     if (val==L->elem){
  tempPtr=L;
  L=L->next;
  free(tempPtr);
  return L;
 }    
         
     else
     for(i=1; i<k2; i++)
     {
         prev=curr;
         curr=curr->next;
     }
     tempPtr=curr;
     prev->next=curr->next;
     free(tempPtr);
     }    
     return L; 
}
Ricerca appunti sul web
 
  
    Ricerca personalizzata
  
sabato 28 febbraio 2009
Sorgenti c : Elimina elemento in una lista (ultima occorrenza)
Pubblicato da
Baiox
alle
00:44
        
 
 
Etichette: Informatica, Programmazione C
Iscriviti a:
Commenti sul post (Atom)
0 commenti:
Posta un commento