nu stiu ce gresesc la prb asta....
prb: se da o lista .Sa se creeze 2 liste .Una cu elementele pare si alta cu cele impare a listei initiale.
#include<iostream.h>
#include<conio.h>
struct nod{int info;
nod* adr;};
void sterge(nod* &first,nod* p){//fctia are ca parametrii first= adresa primului nod dintr-o lista si un pointer p=contine
adresa nodului precedent celui care va fi sters(am scris first de tip referinta ca poate se modifica
adresa primului nod)
nod* a;
if(p==NULL)
{a=first;
first=first->adr;
delete a;
}
else
{a=p->adr;
p->adr=a->adr;
delete a;}}
nod* parimpar(nod* &first){//aici impart cele 2 liste .Elementele pare le tin in lista asta ,modific firstu daca ii cazu ,iar elem. impare
//le bag intr-o lista noua
nod* p,*firstq,*q;
p=first;
firstq=NULL;
if(p->info%2) //verific daca nu cumva lista incepe cu val impare(pe care o sa le bag intr-o lista noua si le sterg din lista
//initiala; s-ar putea sa se modifice first-u listei cu elem pare.
while(p->info%2){
q=new nod;
q->info=p->info;
q->adr=firstq;
firstq=q;
sterge(first,NULL);
p=first;}
while(p->adr!=NULL){ //parcurg lista mai departe...daca gasesc elem pare trec mai departe,altfel cred un nou nod in lista cu
//elemente impare si sterg elem impar din lista initiala(care va fi cea cu elem pare)
if(p->adr->info%2==0)
p=p->adr;
else
{
q=new nod;
q->info=p->adr->info;
q->adr=firstq;
firstq=q;
sterge(first,p);}
}
return firstq;}
nod *a,*b;
int n;
void main(){
clrscr();
cin>>n;
a=gen(n);
b=parimpar(a);
cout<<"primu sir ";
afisare(a);
cout<<endl;
afisare(b);