Funkcja usuwająca rozłączne trójki

0

Cześć mam problem z zadaniem oto jego treść

Funkcja usuń ropatrujaca rozlączne trójki elementów sznura i usuwającą cała trójkę jeśłi zawiera równe wartości. Dodatkowo, jeżeli następny element następujący bezpośrednio po usuniętej trójce zawiera mniejszą od usuwanych o co najwyżej K to też usuwamy
(w tym przypadku nie jest on uwzględniany w kolejnych trójkach),K jest liczbą czałkowitą dodatnią będącą parametrem funkcji. Trójki wybierane są tak że pierwszy element sznura jest początkowym elementem sznura jest początkowym elementem pierwszej trójki
Pamieć zajmowania przez usuwanie elementy ma zostać zwolniona. funkcja nie może używać tablic,pomocniczych sznurów ani struktur dancyh
dostepnych w biblioteve standarowej(wektorów,list,kolejek,itp);

Oto mój kod

void sznur::usun(int K)
{
    Node*zaszuk=nullptr;
    Node*a=pocz;
    while(a!=nullptr && a->nast!=nullptr && a->nast->nast!=nullptr)
    {
        Node*jeden=a;
        Node*dwa=a->nast;
        Node*trzy=a->nast->nast;
        if(jeden->dane==dwa->dane && dwa->dane==trzy->dane)
        {
            if(zaszuk!=nullptr)
            {
                zaszuk->nast=trzy->nast;
            }
            else
            {
                pocz=trzy->nast;
            }
            if(zaszuk!=nullptr)
            {
                a=zaszuk->nast;
            }
            else
            {
                a=pocz;
            }
            delete jeden;
            delete dwa;
            delete trzy;
            ileJest=ileJest-3;
        }
        else if(dwa->dane<=K)
        {
            if(zaszuk!=nullptr)
            {
                zaszuk->nast=trzy;
            }
            else
            {
                pocz=trzy;
            }
            if(zaszuk!=nullptr)
            {
                a=zaszuk->nast;
            }
            else
            {
                a=pocz;
            }
            delete jeden;
            delete dwa;
            delete trzy;
            ileJest=ileJest-3;
        }
        else
        {
            zaszuk=trzy;
            a=zaszuk->nast;
        }
    }
}
//7 7 6 3 3 3 2 1 1 1 1 1 -> 7 7 6 1
//9 9 9 6 6 6 4 -> pusty
//9 7 6 5 5 5 3 2 1 -> 9 7 6 3 2 1

problem jest tylko przy sznure 9 9 9 6 6 6 4 nie staje sie pusty tylko wyświetla 4 na końcu i nie wiem jak tą 4 usunąć gdzie jest błąd w kodzie proszę o pomoc z góry dzięki

0

Nie rozumiem, użyj tej funkcji do usuwania węzła co ci zaproponowałem, i zrób tutaj to samo - dla każdego węzła sprawdź czy zachodzi warunek w którym masz go usunąć, a jak tak, to usuń. W ciele funkcji usun nie powinieneś mieć żadnego delete.

0
enedil napisał(a):

Nie rozumiem, użyj tej funkcji do usuwania węzła co ci zaproponowałem, i zrób tutaj to samo - dla każdego węzła sprawdź czy zachodzi warunek w którym masz go usunąć, a jak tak, to usuń. W ciele funkcji usun nie powinieneś mieć żadnego delete.

problem jest przy tym sznurze 9 9 9 6 6 6 4 nie jest pusty a powinien byc pusty w moim kodzie przy tym sznurze wyświetla się ostatnica cyfra 4 która nie jest usuwana jak to naprawić w kodzie

0

Ok, popracujmy nad Twoim kodem. Co wg Ciebie oznacza ten fragment? A konkretniej, czemu sprawdzasz element dwa, a nie to co jest za usuwaną trójką?

        else if(dwa->dane<=K)
0
enedil napisał(a):

Ok, popracujmy nad Twoim kodem. Co wg Ciebie oznacza ten fragment? A konkretniej, czemu sprawdzasz element dwa, a nie to co jest za usuwaną trójką?

        else if(dwa->dane<=K)

Zastanowiłem się trochę nad swoim kodem to co zacytowałeś rzeczywiście nie ma sensu ten warunek w zadaniu piszę "Dodatkowo, jeżeli następny element następujący bezpośrednio po usuniętej trójce zawiera mniejszą od usuwanych o co najwyżej K " czyli powinno być jak się nie myle else if(trzy->nast->dane<=K)?? o ile dobrze myśle

0

Tak, o ile trzy->nast != nullptr

0
enedil napisał(a):

Tak, o ile trzy->nast != nullptr

poprawiłem warunek w if(trzy->nast!=nullptr && trzy->nast->dane<=K) ale nadal jest problem ze sznurem 9 9 9 6 6 6 4 gdzie nie usuwa 4 problem jest przy pocz=trzy->nast gdy wskaźnik się na 4 i nie może go usunąć jak to rozwiązać

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