if ( p != 0 )
{
do
{
cout<<p->info <<" " ;
p = p->next ;
}while ( p != crt->next ) ;
cout << endl ;
}
else
cout<<" Lista este vida ! "<<endl ;
L}ISTA cautareNod (LISTA crt , int infoc )
{
LISTA p = crt ;
if (p != 0)
{
do
{
if (p->info == infoc )
return p ;
// se returneaza adresa nodului de informatie infoc
p = p->next ;
}while (p != crt ) ;
}
return 0 ;
}
LISTA copieLista (LISTA crt )
{
if ( ! crt )
{
cout<<"LISTA este vida ! "<<endl ;
return 0 ;
}
LISTA crtcopy = 0 , p = crt->next ;
// incepem copierea cu primul nod inserat in lista ,
// asa incat crt sa reprezinte tot adresa ultimului element inserat
do
{
adaugare ( crtcopy , p->info ) ;
p = p->next ;
}while (p != crt->next ) ;
return crtcopy ;
}
void joc1 (LISTA &crt , int n , int &poz )
{
do
{
cout<<" Pozitia de la care incepe numaratoarea : " ;
cin>>poz ;
}while ( poz <= 0 || poz > n ) ;
LISTA p , q = cautareNod ( crt , poz ) ;
int j = n ;
do
{
for ( int i = 1 ; i < n ; i++)
{
p = q ;
q = q->next ;
}
// nodul de sters are adresa pastrata in q ,
// iar precedentul , in p
cout<<" Copilul eliminat este "<<q->info <<endl ;
p->next = q->next ; // l e g a t u r a noua
if ( q == crt )
crt = p ;
delete q ; // se s t e r g e n o dul q
// a f i s a r e L i s t a ( c r t ) ;
// se t r e c e l a u rm a t o rul c o p i l de dupa c e l s t e r s
q = p->next ;
j --; // se dece remen te a z a numarul de c o p i i
}while ( j > 1 ) ;
}void joc2 (LISTA &crt , int n , int &poz , int &m)
{
do
{
cout<<"Pozitia de la care incepe numaratoarea : " ;
cin>>poz ;
}while ( poz <= 0 || poz > n ) ;
do
{
cout<<" Pasul de eliminare , m: ";
cin>>m;
}while (m < 2 ) ;
LISTA p , q = cautareNod ( crt , poz ) ;
do
{
for ( int i = 1 ; i < m; i++)
{
p = q ;
q = q->next ;
}
cout<<"Copilul eliminat este "<<q->info <<endl ;
p->next = q->next ;
if ( q == crt )
crt = p ;
delete q ;
// afisareLista ( crt ) ;
q = p->next ;
n--;
}while ( n > 1 ) ;
}
int main ( )
{
int nr , poz , m;
LISTA curent = creareLista ( nr ) ;
// realizam o copie a listei initiale
LISTA curentcopy = copieLista ( curent ) ;
cout<<" Lista circulara initiala . "<<endl ;
afisareLista ( curent ) ;
joc1 ( curent , nr , poz ) ;
cout<<" Castigator al primului joc este copilul " ;
afisareLista ( curent ) ;
joc2 ( curentcopy , nr , poz , m) ;
cout<<" Castigator al celui de-al doilea joc este copilul " ;
afisareLista ( curentcopy ) ;
return 0 ;
}