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.
Ringrazio chiunque possa darmi una manocodice: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; } } } }![]()

Rispondi quotando
VVoVe:
