#include #include typedef struct cvord{ int v; struct cvord *sl; struct cvord *pr; } CVORD; void dodaj_na_kraj(CVORD** poc,CVORD** kraj, int v){ CVORD *el=malloc(sizeof(CVORD)); if(el==NULL) exit(EXIT_FAILURE); el->v = v; if(*poc==NULL){ el->sl = NULL; el->pr = NULL; (*poc) = el; (*kraj) = el; }else{ (*kraj)->sl = el; el->pr = (*kraj); el->sl = NULL; (*kraj) = el; } } void ispisi(CVORD *l){ while(l!=NULL){ printf("(%d<-%d->%d)",l->pr==NULL?-1:l->pr->v,l->v,l->sl==NULL?-1:l->sl->v); l = l->sl; } } /* samostalno uraditi dealokaciju i ucitavanje sa std. ulaza */ void invertuj(CVORD** poc, CVORD** kraj){ CVORD *t=*poc; CVORD *x,*y; int neparan=0; if(t->sl!=NULL) *poc=t->sl; while(t!=NULL){ if(t->sl==NULL){ neparan = 1; break; }else{ x = t; y = t->sl; x->sl = y->sl; y->pr = x->pr; x->pr=y; y->sl=x; x->sl->pr=x; t = x->sl; // printf("Izvrcem %d i %d\n",x->v,y->v); // ispisi(*poc); // printf("Sledeci je %d\n",t->v); } } *kraj=t; } int main(){ CVORD *poc=NULL; CVORD *kraj=NULL; dodaj_na_kraj(&poc,&kraj,1); dodaj_na_kraj(&poc,&kraj,2); dodaj_na_kraj(&poc,&kraj,3); dodaj_na_kraj(&poc,&kraj,4); dodaj_na_kraj(&poc,&kraj,5); dodaj_na_kraj(&poc,&kraj,6); ispisi(poc); invertuj(&poc, &kraj); ispisi(poc); return 0; }