zamiania wartości w liście dynamicznej
Ostatnio zmodyfikowano 2018-01-19 23:38
Crowsow Temat założony przez niniejszego użytkownika |
zamiania wartości w liście dynamicznej » 2017-12-29 17:32:44 Witam serdecznie. Chciałbym zamienić wartości końcowe z początkowymi w moim sznurze(liście dynamicznej). Plan był taki żeby z jednej strony złapać startem, z drugiej zamieniaczem, wartości zamienić swapem i żeby tak jakby odwrócić sznur (np. 4761 ma się zamienić na 1674 ) Licznik to długość sznura. Pierwsza zamiana działa niestety za drugim razem zamieniacz nie znajduje się w miejscu przeze mnie pożądanym, i nie mam pojęcia dlaczego. Z góry bardzo dziękuję za pomoc, już kolejny dzień nad tym siedzę :/ Kod pliku h: struct Sznur { private: struct Node { int value; Node * next; Node( int _value, Node * _next = NULL ) { value = _value; next = _next; } }; Node * head; int counter; public: Sznur(); ~Sznur(); void wstaw( int _value ); void wypisz( int licznik ); void dodawanie( int licznik ); void zamiana( int licznik ); }; A kod funkcji w cpp: void Sznur::wypisz( int licznik ) { Node * tmp = head; cout << "\nCiag 1 : "; for( int i = 0; i < licznik; i++ ) { cout << tmp->value << " "; tmp = tmp->next; } cout << "\nCiag 2 : "; while( tmp != NULL ) { cout << tmp->value << " "; tmp = tmp->next; } }
void Sznur::zamiana( int licznik ) { Node * start = head; Node * stop = NULL; Node * zamieniacz = head; Node * pzamieniacz = NULL; int j = licznik - 1; for( int i = 0; i < licznik / 2; i++ ) { for( j; j > 0; j-- ) { pzamieniacz = zamieniacz; zamieniacz = zamieniacz->next; pzamieniacz->next = zamieniacz; } cout << "\nZamieniam liczbe " << start->value << " z liczba " << zamieniacz->value; swap( start->value, zamieniacz->value ); wypisz( licznik ); stop = start; start = start->next; stop->next = start; j--; } |
|
pekfos |
» 2017-12-31 01:35:24 Zmienna j jest błędnie użyta. Po pierwszym obiegu zewnętrznej pętli, jej wartość jest ujemna i wewnętrzna pętla więcej nie wykonuje się. Masz też w tym kodzie konstrukcje, które nie mają żadnego sensu: pzamieniacz = zamieniacz; zamieniacz = zamieniacz->next; pzamieniacz->next = zamieniacz; |
Przypisanie do next nic tu nie wnosi, nie zmienia w ogóle wartości tego wskaźnika. To samo ze zmiennymi start i stop. Skoro zamieniasz same wartości pól value, nie ma żadnego sensu w grzebaniu przy wartościach next. Znasz długość listy n, więc zamieniaj element start = head z elementem znajdującym się o n - 1 pozycji dalej (ostatni element). Następnie powtarzaj dla start = start->next i n = n - 2 (dla podciągu pomiędzy zamienionymi elementami). |
|
Crowsow Temat założony przez niniejszego użytkownika |
» 2018-01-19 23:38:19 Dziękuję, rzeczywiście po przemyśleniu Twoich rad i zastosowaniu się do nich kod zaczął działać bez zarzutu :). Dziękuję bardzo, temat do zamknięcia ;) |
|
« 1 » |