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