Witam!
Mam problem z posortowaniem listy jednokierunkowej bąbelkowo. Za wszelką pomoc z góry dzieki.

#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <Windows.h>
#include <time.h>

using namespace std;
//----------------------------------------------------------------------
struct ELEMENT                          // struktura elementu roboczego
       {
         int Wartosc;
         struct ELEMENT *Nastepny;      // wskaznik do nastepnego elementu
       };

struct INFO                         // struktura elementu informacyjnego
	{ ELEMENT *Glowa;
	  ELEMENT *Ogon;
	};

//------------------------------------------------------------------------
void Do_Listy( int W, INFO *Wsk);
void Tworz_Liste(int n, INFO *Wsk);
void Pisz_Liste(INFO *Wsk);
void Usun_Liste(INFO *Wsk);
void Pisz_Liste2(INFO *Wsk);
void Sortuj_Babelkowo(INFO *Wsk, int &n);
//------------------------------------------------------------------------
int main ()
{
	srand((unsigned)time(NULL));
  int n;
  INFO *Wsk;                 // wskaznik do elementu informacyjnego
    cout << "Podaj dlugosc listy: ";
    cin >> n;
    Wsk = new INFO;
    Wsk->Glowa = NULL;
    Wsk->Ogon = NULL;
	Tworz_Liste(n, Wsk);
    Pisz_Liste(Wsk);
	Sortuj_Babelkowo(Wsk,n);
	Pisz_Liste(Wsk);
    Usun_Liste(Wsk);
   _getch();
   return 0;
}
//------------------------------------------------------------------------
void Do_Listy(int W, INFO *Wsk)
/* Procedura dolacza nowy element do listy - na koniec listy */
{
  if(W>1 && W<50)
  {
	ELEMENT *Nowy;
	 Nowy = new ELEMENT;
  if (Wsk->Glowa == NULL)     	// dolaczenie nowego elementu
    {                                   // do listy pustej
      Wsk->Glowa = Nowy;
      Wsk->Ogon = Wsk->Glowa;
    }
    else                                // dolaczenie nowego elementu
     { Wsk->Ogon->Nastepny = Nowy; // na koncu listy niepustej
       Wsk->Ogon = Nowy;
     }
   Nowy->Wartosc = W;
   Nowy->Nastepny = NULL;
  }
  
}


void Tworz_Liste(int n, INFO *Wsk)
{
  int i, W=0;
	
	
	for (i=1; i <=n;i++ )
    {
      W=rand()%50 +1;
	  
				 if (W < 1 || W > 50)
                        {
                           do
                           {
                              W=rand()%50 +1;
                           }
                           while (W < 1 || W > 50);
				 }
					Do_Listy(W, Wsk);
                        
      
    
	
	}
}
//------------------------------------------------------------------------
void Pisz_Liste(INFO *Wsk)
/*  Procedura wyswietla elementy listy w kierunku od poczatku do konca */
{
  ELEMENT *Biezacy;
  Biezacy = Wsk->Glowa;
  if (Wsk->Glowa == NULL)
    cout << "\n\nLista jest pusta\n";
    else 
	{
		cout << "\n\nOto lista:\n" << endl;
		while (Biezacy != NULL)
	    {
	      cout << Biezacy->Wartosc << endl;
	      Biezacy = Biezacy->Nastepny;
	     }
    }
}

void Usun_Liste(INFO *Wsk)
{
  ELEMENT *Biezacy, *Usuniety;
  Biezacy = Wsk->Glowa;
  if (Wsk->Glowa == NULL)
    cout << "\n\nLista jest pusta";
    else { while (Biezacy != NULL)
	    {
	      Usuniety = Biezacy;
	      Biezacy = Biezacy->Nastepny;
	      delete Usuniety;
	     }
	     if (Biezacy == NULL)
	       cout << "\nListe usunieto" << endl;
	  }
}
//------------------------------------------------------------------------

void Sortuj_Babelkowo(INFO *Wsk, int &n)

{
	
	ELEMENT *Biezacy, *Przed, *Po;
	





  int i, j,a,b,tmp;
  Biezacy = Wsk->Glowa;
  Po=Biezacy->Nastepny;

  for(j=0; j<n-1;j++)
	 { for (i = 0; i <= n-1; i++)
  {
	  if (Biezacy->Wartosc < Po->Wartosc)
	    { 
			tmp = Biezacy->Wartosc;
	      Po->Wartosc = Biezacy->Wartosc;
	      Po->Wartosc = tmp;
	    }
	 Biezacy = Biezacy->Nastepny;
	 Po = Biezacy->Nastepny;
  }
  Biezacy = Wsk->Glowa;
  Po=Biezacy->Nastepny;

  }
}