Witam wszystkich forumowiczów.
Mam problem z sortowaniem listy, w którym muszę zamienić wskaźniki elementów.
Mam oto taką strukturę:
typedef struct lista {
int liczba;
struct lista *next;
} element;
Stworzyłem do tego funkcję sortującą, która zamienia wartości zmiennej 'liczba' i wszystko działa poprawnie.
void sortowanie2(element *adres) {
element *tmp,*tmp2;
tmp=adres;
int p=1; // zmienna, ktora pilnuje czy byla zamiana w liscie
while(p!=0) {
p=0; // wyzerowanie zmiennej pomocniczej
while(tmp->next!=NULL) {
if(tmp->liczba > tmp->next->liczba){
p=1; // ustawienie zmiennej na 1, znaczy ze zamiana nastapila
tmp2=tmp->liczba;
tmp->liczba=tmp->next->liczba;
tmp->next->liczba=tmp2;
}
tmp=tmp->next;
}
tmp=adres;
}
}
Jednak struktura może mieć wiele danych i łatwiej po prostu zamienić elementy listy 'miejscami', tzn. zamienić im wskaźniki, jednak, gdy spróbowałem cały czas wywala mi program.
void sortowanie2(element *adres) {
element *teraz,*prev,*tmp2;
teraz=adres;
prev=NULL;
int p=1;
while(p!=0) {
p=0;
while(teraz->next!=NULL) {
if(teraz->liczba > teraz->next->liczba){
p=1;
if(prev!=NULL) prev=teraz->next;
tmp2=teraz;
teraz->next=teraz->next->next;
teraz->next->next=tmp2;
}
prev=teraz;
teraz=prev->next;
}
teraz=adres;
}
}
Próbowałem robić na różne sposoby i już nie mam pomysłu co może być nie tak. Proszę o pomoc.