Skocz do zawartości

Recommended Posts

Napisano

Cześć mam problem z zadaniem treść przesyłam w postaci zdjęcia a mój kod wygląda tak

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 polega na tym iż dla drugieo sznura powinien byc pusty ale wyświetla 4 na końcu nie wiem jak zrobić żeby tej 4 nie było nie mam pomysłu na to proszę o pomoc gdzie robię błąd w kodzie z góry dzięki

IMG_20200825_100642.jpg

  • 1 month later...
Napisano

Wydaje się, że usuwasz węzły bez odpowiedniego zaktualizowania wskaźników nast dla sąsiednich węzłów. 

Warunek dla dwa->dane <= K - usuwasz trzy węzły (jeden, dwa, trzy)

gdy usuwasz trzy identyczne węzły i gdy dwa->dane <= K) aktualizujesz zaszuk i a w ten sam sposób,  może być mylące i prowadzić do błędów

usuń trzy węzły tylko wtedy, gdy są one identyczne
usuń tylko dwa węzły, gdy dwa->dane <= K
aktualizuj ileJest odpowiednio dla obu przypadków

 

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;
            }
            delete jeden;
            delete dwa;
            delete trzy;
            ileJest -= 3;
            a = (zaszuk != nullptr) ? zaszuk->nast : pocz;
        }
        else if (dwa->dane <= K)
        {
            if (zaszuk != nullptr)
            {
                zaszuk->nast = trzy;
            }
            else
            {
                pocz = trzy;
            }
            delete jeden;
            delete dwa;
            ileJest -= 2;
            a = (zaszuk != nullptr) ? zaszuk->nast : pocz;
        }
        else
        {
            zaszuk = trzy;
            a = trzy->nast;
        }
    }
}


 

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gość
Odpowiedz...

×   Wkleiłeś zawartość bez formatowania.   Usuń formatowanie

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Utwórz nowe...