1. #include <iostream.h>
  2.  
  3. typedef struct un_nod
  4. {
  5.     int info;
  6.     un_nod *urm;
  7. }TNod;
  8.  
  9. TNod *lista;
  10. int n;
  11.  
  12. TNod *creare_lista()
  13. {
  14.     TNod *prim, *ultim, *p;
  15.    
  16.     int i;
  17.    
  18.     cout<<"Dati n mai mare ca 3\n n=";
  19.     cin>>n;
  20.    
  21.     prim=new TNod;
  22.     cin>>prim->info;
  23.    
  24.     prim->urm=NULL;
  25.     ultim=prim;
  26.    
  27.     for(i=2;i<=5;i++)
  28.     {
  29.         p=new TNod;
  30.         cin>>p->info;
  31.         p->urm=NULL;
  32.         ultim->urm=p;
  33.         ultim=p;
  34.     }
  35.    
  36.     return prim;
  37. }
  38.  
  39.  
  40. TNod *sterg(TNod *p, int k)
  41. {
  42.     TNod *q, *r;
  43.     int i;
  44.     q=p;
  45.     for(i=2;i<=k-1;i++)
  46.         q=q->urm;
  47.     r=q->urm;
  48.     q->urm=r->urm;
  49.     delete r;
  50.     return p;
  51. }
  52.  
  53. TNod *sterg_sfarsit(TNod *p)
  54. {
  55.     TNod *q;
  56.     q=p;
  57.     while(q->urm->urm) q=q->urm;
  58.     delete q->urm;
  59.     q->urm=NULL;
  60.     return p;
  61. }
  62.  
  63. TNod *sterg_inceput(TNod *p)
  64. {
  65.     TNod *q;
  66.     q=p->urm;
  67.     delete p;
  68.     return q;
  69. }
  70.  
  71.  
  72. void afisare(TNod *p)
  73. {
  74.     while(p)
  75.     {
  76.         cout<<p->info<<", ";
  77.         p=p->urm;
  78.     }
  79.     cout<<"\n";
  80. }
  81.  
  82. TNod *sterge_3_elemente(TNod *prim) //stergem cele mai mici 3 elemente din lista
  83. {
  84.     int i,j;
  85.     int minim;
  86.     TNod *r, *aux;; //de la return
  87.    
  88.     r=prim;
  89.    
  90.     for(i=1;i<=3;i++)
  91.     {
  92.         minim=999;
  93.         aux=r;
  94.         while(aux)
  95.         {
  96.             if(aux->info<minim)
  97.                 minim=aux->info;
  98.             aux=aux->urm;
  99.         }
  100.        
  101.         aux=r;
  102.  
  103.         j=1;
  104.         while(aux)
  105.         {
  106.             if(aux->info==minim)
  107.             {
  108.                 break;
  109.             }
  110.             aux=aux->urm;
  111.             j++;
  112.         }
  113.        
  114.         if(j==1)
  115.             r=sterg_inceput(r);
  116.         else if(j==n)
  117.             r=sterg_sfarsit(r);
  118.         else
  119.             r=sterg(r, j);
  120.        
  121.         cout<<"Lista dupa stergerea "<<i<<" este: ";
  122.         afisare(r);
  123.     }
  124.     return r;
  125. }
  126.  
  127. int main()
  128. {
  129.  
  130.     lista=creare_lista();
  131.    
  132.     cout<<"Lista este: \n";
  133.     afisare(lista);
  134.    
  135.     lista=sterge_3_elemente(lista);
  136.    
  137.     cout<<"Lista la sfarsit este: \n";
  138.     afisare(lista);
  139.     return 0;
  140. }