Sortowanie listy dwukierunkowej

0

Chciałbym wykonać sortowanie listy dwukierunkowej. Mam akurat problem z zamianą adresów wskaźnika aktualnego i następnego po nim, czyli:

Mamy np.
struct lista{
int wartosc;
struct lista * right;
struct lista * left;
}

I w funkcji sort deklaruję pomocniczy element

struct lista *tmp;

To jak teraz zamienić

tmp z tmp->right?

Chodzi mi konkretnie o to, który element przypisać któremu?
Ponieważ metoda:

cmp=tmp;
tmp=tmp->right;
tmp->right=cmp;

jest w zupełności niewystarczająca.

1

Proponuje włączyć myslenie.
Pomyśl co w ogóle chcesz zrobić. Chcesz zamienic ze soba dwa elementy na liście dwukierunkowej? To masz do przepięcia 6 (!) wskaźników. A ty przepinasz jeden i się dziwisz że to nie wystarczyło ;]

pierwszy = cmp;
drugi = cmp->right;
poprzednik_lewego = pierwszy->left;
nastepnik_prawego = drugi->right;

pierwszy->left = drugi;
drugi->right = pierwszy;
poprzednik_lewego->right = drugi;
drugi->left = poprzednik_lewego;
nastepnik_prawego->left = pierwszy;
pierwszy->right = nastepnik_prawego;
0

Mógłbym prosić jeszcze tylko o krótkie wyjaśnienie, który to jest ten pierwszy, drugi a który tutaj będzie aktualny? I czy to jest forma jaką się przypisuje jak w C/C++? Wybacz, ale jestem mało kumaty, czasami trzeba mi wręcz aż na tacy podać ;)

0

O_O to żart ? A co w takim razie znaczy u Ciebie left i right?

0

Tj. mam rozumieć, że pierwszy to jest aktualny, drugi to aktualny->right, poprzednik lewego to aktualny->left->left, następnik prawego to aktualny->right->right, tak? Bo to cmp mnie zmyliło...

1

No miałeś tam u siebie jakieś cmp i tmp więc założyłem ze one coś tam u ciebie znaczą. Układ który zaprezentowałem to:
poprzednik_lewego <=> pierwszy <=> drugi <=> następnik_prawego

1 użytkowników online, w tym zalogowanych: 0, gości: 1