Męczę się z funkcją biblioteki sznur mającą przepinać węzły zawierające liczby parzyste na koniec listy, odwracając przy tym ich kolejność.
np po wpisaniu listy 3->2->5->4->6 otrzymamy 3->5->6->4->2.
Algorytm, który chcę zastosować to wypięcie parzystego węzła i wstawienie go jako następny po zapamiętanym ogonie. Niestety program albo w nieskończoność wypisuje liste albo wykrzacza się kiedy napotka liczbę parzystą i nie wypisuje nic(to aktualna sytuacja). Jak powinno to wyglądać?
Funkcja w pliku biblioteki sznur.cpp:
void Sznur::przestawParzyste()
{
Node* tail_mem = tail;
Node* runner;
Node* follower = nullptr;
runner = head;
while(runner != tail_mem)
{
if(runner->data%2 == 0)
{
///wypięcie
if(runner == head)
{
///aktualizacja poczatku
head=runner->next;
}
follower->next=runner->next;
tail_mem->next=runner;
///przepięcie
runner->next=nullptr;
tail=runner;
}
else
{
follower = runner;
runner = runner -> next;
}
}
}
plik sznur.h:
#ifndef ZNAM_SZNUR9_H
#define ZNAM_SZNUR9_H
struct Sznur{
private:
struct Node{
int data;
Node* next;
Node(int d, Node* n=nullptr)
{
data=d;
next=n;
}
};
int howBig=0;
Node* head=nullptr;
Node* tail=nullptr;
public:
Sznur()=default;
~Sznur();
void write();
void add(int a);
// usunFragmenty(int b);
//void usunZPar(int c);
void przestawParzyste();
};
#endif // ZNAM_SZNUR9_H
```cpp