Witam. Nie moge poradzic sobie z zamienianiem kolejnosci elementow w liscie jednokierunkowej realizowanego poprzez zamiane wskaznikow.
Funkcja zamiana wyglada w nastepujacy sposob:
element* zamiana(element* pocz, element ** first, element ** second)
{
printf("Zamianiam %d i %d\n", (*first)->liczba, (*second)->liczba);
element *pierwszy=*first;
element *popierwszym=pierwszy->next;
element *drugi=*second;
element *podrugim=drugi->next;
if (pierwszy->next==drugi)
{
*first=drugi;
(*first)->next=pierwszy;
pierwszy->next=podrugim;
}
else if (drugi->next==pierwszy)
{
*first=drugi;
*second=pierwszy;
(*second)->next=*first;
(*first)->next=popierwszym;
}
else
{
*first=drugi;
*second=pierwszy;
(*second)->next=podrugim;
(*first)->next=popierwszym;
}
if (pierwszy==pocz)
return *first;
else if (drugi==pocz)
return *second;
else return pocz;
}
Wywolujac ja w main po uprzednim wczytaniu listy dziala bez problemu. Dla danych wejsciowych :
1 2 4 3 5 6
Wywolujac ja w ten sposob:
element* pom=pocz; //pocz to oczywiscie wskaznik na 1 element listy
pocz=zamiana(pocz, &pom->next->next, &pom->next->next->next);
dziala dobrze. Zamienia 4 i 3 element.
Jednak w tej funkcji:
element * babelkowe(element*pocz)
{
element* pom=pocz;
int zmiany=1;
while (zmiany!=0)
for (zmiany=0; pom->next; )
{
if ((pom->liczba)>(pom->next->liczba))
{
printf("Zamianiam %d i %d\n", pom->liczba, pom->next->liczba);
pocz=zamiana(pocz, &pom, &pom->next);
++zmiany;
}
else
pom=pom->next;
}
return pocz;
}
trace element 3.
Dane wyjsciowe to:
1 2 4 5 6
Dlaczego w main wszystko dziala jak powinno a w funkcji sortujacej mimo, ze chce zamienic wartosci tych samych wskaznikow trace dostep do elementu 3 a wskaznik z elementu drugiego pokazuje na 4