Witam mam za zadanie napisać program, który usunie duplikaty elementów na liście dwukierunkowej. Udało mi się ten program napisać w wersji iteracyjnej jednak musze napisać jeszcze w wersji rekurencyjnej a z tym mam problem. Dotychczasowy kod:
void usunDR(lista *l)
{
lista p,tmp;
p=*l;
if((*l)==0 && (*l)->nast==0 )
return;
if((*l)->klucz==(*l)->nast->klucz)
{
tmp=(*l)->nast;
(*l)->nast=(*l)->nast->nast;
if(tmp->nast != 0)
(*l)->nast->pop=(*l);
free(tmp);
}
usunDR((*l)->nast);
}
Jednakże program po uruchomieniu przestaje działać, co może byc przyczyną ? Dla porównania poniżej wersja iteracyjna.
void usunD (lista *l)
{
lista p,tmp;
p=*l;
while(p!=0 && p->nast != 0)
{
if(p->klucz==p->nast->klucz)
{
tmp=p->nast;
p->nast=p->nast->nast;
if(tmp->nast != 0)
p->nast->pop=p;
free(tmp);
}
p=p->nast;
}
}