Funkcja odwracająca elementy stosu

0

Witam, nie mam pomysłu na implementację funkcji odwracającej wskaźniki do węzłów(struktur) "do góry nogami", oto kod:

//Jest to implementacja klasy Stos. Jest to klasa stosu znaków. 
//Struktury węzła zawierają dane typu char i wskażnik do 
//następnego węzła.

#include <iostream>
#include <cstddef>

using namespace std;

struct CzlonStosu //Węzeł
    {
        char dane;
        CzlonStosu *nast;
    };

    typedef CzlonStosu* WskDoCzlonuStosu;

class Stos
{
      //private:
        
      public:
          Stos( ): gora(NULL)
        {
            //Celowo puste.
        }
        
          Stos(const Stos& stos)
        {
            if (stos.gora == NULL)
                gora = NULL;
            else
            {
                WskDoCzlonuStosu pom = stos.gora;
                //Wskaźnik pom przechodzi po kolei po węzłach od gora w dół listy stos.
                WskDoCzlonuStosu koniec;
                //koniec wskazuje końcowy węzeł nowego stosu.
    
                koniec = new CzlonStosu;
                koniec->dane = pom->dane;
                gora = koniec;
                //Pierwszy węzeł został utworzony i wypełniony danymi.
                //Nowe węzły będą teraz dodawane za tym pierwszym.
    
                pom = pom->nast;
                while (pom != NULL)
                {
                    koniec->nast = new CzlonStosu;
                    koniec = koniec->nast;
                    koniec->dane = pom->dane;
                    pom = pom->nast;
                }
                koniec->nast = NULL;
            }
        }
    
    
        ~Stos( )
        {
            char nast;
            while (! empty( ))
                nast = zdejmij( );   //zdejmij wywołuje delete.
        }
    
        //Wykorzystuje bibliotekę cstddef:
        bool empty( ) const
        {
            return (gora == NULL);
        }
    
    
        //Wykorzystuje bibliotekę cstddef:
        void wepchnij(char znak)
        {
            WskDoCzlonuStosu wsk_pom;
            wsk_pom = new CzlonStosu;
    
            wsk_pom->dane = znak;
    
            wsk_pom->nast = gora;
            gora = wsk_pom;
        }
        
        void odwroc()
        {
             if (!empty( )) 
             {
                 for(WskDoCzlonuStosu iter = gora; iter!=NULL; iter = iter->nast)
                 {
                     //
                 }
             }
        }
        //Wykorzystuje bibliotekę iostream:
        char zdejmij( )
        {
            if (empty( )) 
            {
                cout << "Błąd: próba zdjęcia elementu z pustego stosu.\n";
                exit(1);
            }
    
            char wynik = gora->dane;
    
            WskDoCzlonuStosu wsk_pom; 
            wsk_pom = gora; 
            gora = gora->nast;
    
            delete wsk_pom;
    
            return wynik;
        }
        
        WskDoCzlonuStosu gora;
};

int main( )
{
    Stos s;
    s.wepchnij('a');
    s.wepchnij('b');
    s.odwroc();
    for(WskDoCzlonuStosu iter = s.gora; iter!=NULL; iter = iter->nast)
    cout << (iter->dane) << endl; //pętla wypisująca wartości danych zawartych w 
    system("pause");      //poszczególnych węzłach stosu
    return 0;
}                   
0

uh oh.. a mógłbyś na krociutkim przykladzie wyjasnic co ma robic to odwracanie do gory nogami?

przejscie z (bottom)1->2->3->4->5 na 1<-2<-3<-4<-5<-(top) ?

0
void Stos::odwroc()
   {
     CzlonStosu *g=gora;
     gora=0;
     while(g)
        {
          CzlonStosu *tmp=g;
          g=g->nast;
          tmp->nast=gora;
          gora=tmp;
        }
   }

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