Ciao a tutti.
Non capisco come mai questa mia funzione non lavori bene con le liste. Spero qualcuno possa illuminarmi perchè è da 4 ore ormai che tento invano di trovare l'errore.
codice:
typedef struct node *edgeInfo; //Informazione su un arco della rete
typedef struct node {
int edgeCost;
edgeInfo nextAdj; //puntatore al prossimo elemento
} edge;
...
//funzione per ordinare in maniera crescente una lista in base ai valori contenuti in edgeCost
void ordinaLista(edgeInfo pnt)
{
edgeInfo aux1, aux2, elemTesta, agg;
int i=0, powMin, flag=0, control;
agg = elemTesta = pnt;
while(elemTesta->nextAdj != NULL)
{
aux2 = elemTesta;
powMin = elemTesta->edgeCost;
control = 1; //mi controlla se il primo elemento della lista è attualmente il più basso
for(aux1=elemTesta; aux1->nextAdj != NULL; aux1=aux1->nextAdj)
{
if(powMin > aux1->nextAdj->edgeCost){
aux2 = aux1;
control = 0;
powMin = aux1->nextAdj->edgeCost;
}
}
if (flag==0){ // lo esegue solo la prima volta
if(control==1){ //l'elemento minore E' quello all'inizio della lista
aux2 = elemTesta->nextAdj;
elemTesta = aux2;
flag = 1;
}else{ //l'elemento minore NON è quello all'inizio della lista
aux1 = aux2->nextAdj;
aux2->nextAdj = aux1->nextAdj;
aux1->nextAdj = elemTesta;
agg = aux1;
pnt = aux1;
flag = 1;
}
}else{
if(control==1){ //l'elemento minore E' quello all'inizio della lista
agg = elemTesta;
aux2 = elemTesta->nextAdj;
elemTesta = aux2;
}else{ //l'elemento minore NON è quello all'inizio della lista
aux1 = aux2->nextAdj;
aux2->nextAdj = aux1->nextAdj;
aux1->nextAdj = elemTesta; // vedi con aux2 mi sa no
agg->nextAdj = aux1;
agg = aux1;
}
}
}
}
Ringrazio chiunque possa darmi una mano