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