#include <iostream.h>
typedef struct un_nod
{
int info;
un_nod *urm;
}TNod;
TNod *lista;
int n;
TNod *creare_lista()
{
TNod *prim, *ultim, *p;
int i;
cout<<"Dati n mai mare ca 3\n n=";
cin>>n;
prim=new TNod;
cin>>prim->info;
prim->urm=NULL;
ultim=prim;
for(i=2;i<=5;i++)
{
p=new TNod;
cin>>p->info;
p->urm=NULL;
ultim->urm=p;
ultim=p;
}
return prim;
}
TNod *sterg(TNod *p, int k)
{
TNod *q, *r;
int i;
q=p;
for(i=2;i<=k-1;i++)
q=q->urm;
r=q->urm;
q->urm=r->urm;
delete r;
return p;
}
TNod *sterg_sfarsit(TNod *p)
{
TNod *q;
q=p;
while(q->urm->urm) q=q->urm;
delete q->urm;
q->urm=NULL;
return p;
}
TNod *sterg_inceput(TNod *p)
{
TNod *q;
q=p->urm;
delete p;
return q;
}
void afisare(TNod *p)
{
while(p)
{
cout<<p->info<<", ";
p=p->urm;
}
cout<<"\n";
}
TNod *sterge_3_elemente(TNod *prim) //stergem cele mai mici 3 elemente din lista
{
int i,j;
int minim;
TNod *r, *aux;; //de la return
r=prim;
for(i=1;i<=3;i++)
{
minim=999;
aux=r;
while(aux)
{
if(aux->info<minim)
minim=aux->info;
aux=aux->urm;
}
aux=r;
j=1;
while(aux)
{
if(aux->info==minim)
{
break;
}
aux=aux->urm;
j++;
}
if(j==1)
r=sterg_inceput(r);
else if(j==n)
r=sterg_sfarsit(r);
else
r=sterg(r, j);
cout<<"Lista dupa stergerea "<<i<<" este: ";
afisare(r);
}
return r;
}
int main()
{
lista=creare_lista();
cout<<"Lista este: \n";
afisare(lista);
lista=sterge_3_elemente(lista);
cout<<"Lista la sfarsit este: \n";
afisare(lista);
return 0;
}