#include using namespace std; struct Nod {int info; Nod *next; }; Nod *prim, *ultim; void creare_adaugare() {if(prim==NULL) {prim=new Nod; cout<<"introduceti valoarea retinuta in primul nod:"; cin>>prim->info; prim->next=0; //la crearea listei va exista un singur nod, primul // si prin urmare adresa urmatoare lui este 0 ultim=prim; //evident, avand un singur element acesta va fi si primul // si ultimul } else {Nod *c; c=new Nod; cout<<"valoarea de adaugat in lista "; cin>>c->info; ultim->next=c; //se adauga noul nod c, dupa ultimul din lista ultim=c; //evident noul nod e ultimul... ultim->next=0;//...si dupa ultimul nu e nimic, deci nici o adresa } } void listare() {Nod *c; c=prim; while(c!=0)//cat timp mai sunt in lista {cout<info<<" "; c=c->next;//avansez in lista trecand la urmatoarea adresa } cout<info!=val &&c) c=c->next; a=new Nod; cout<<"valoarea de inserat "; cin>>a->info; a->next=c->next; c->next=a; if(c==ultim) ultim=a;//pentru ca exista si posibilitatea ca valoarea //dupa care se face inserarea sa fie retinuta de ultimul element } /************************************************************************** functia inserare_inainte() va insera inainte de o valoare val transmisa din main() ***************************************************************************/ void inserare_inainte(int val) {Nod *c,*a; //Nod *a retine adresa nodului ce se va insera in lista //cu *c se face avansarea in lista pana la nodul ce contine valoarea //inainte //care se face inserarea; evident se porneste de la primul; c=prim; //pentru ca exista si posibilitatea ca valoarea inainte de care se face //inserarea // sa fie retinuta de primul nod se va face un test si in caz afirmativ se va //stabili un nou prim element if(prim->info==val) {c=new Nod; cout<<"valoare de inserat "; cin>>c->info; c->next=prim; prim=c;} else {while(c->next->info!=val &&c) //c se pozitioneaza inainte de elementul //cautat c=c->next; a=new Nod; cout<<"valoarea de inserat "; cin>>a->info; a->next=c->next; c->next=a;} } /****************************************************************************** functia realizeaza stergerea unui element dupa continutul transmis ca parametru ******************************************************************************/ void stergere(int val) {Nod *c,*a; //a se sterge, c este precedentul sau.Se va genera o noua //legatura intre c si a->next c=prim; if(prim->info==val) //daca primul nod retine val se sterge primul {a=prim; //se retine in a prim=prim->next; //primul va deveni urmatorul element delete a;} //se elibereaza memoria else {while(c->next->info!=val &&c)//se pozitioneaza pe elementul ce urmeaza a //fi sters c=c->next; a=c->next; c->next=a->next; if(a==ultim) ultim=c; delete a;}// se elibereaza memoria } int main() {int i,n,val_info; cout<<"n=";cin>>n; for(i=1;i<=n;i++) creare_adaugare(); listare(); cout<<"dupa ce valoare din lista se realizeaza inserarea "; cin>>val_info; inserare_dupa(val_info); listare(); creare_adaugare(); listare(); cout<<"valoarea inainte de care se face inserarea "; cin>>val_info; inserare_inainte(val_info); listare(); cout<>val_info; stergere(val_info); listare(); }