De compus programul de creare a unei liste circulare cu cel puțin doua elemente de tip CHAR, apoi de eliminat din aceasta lista toate elementele ce au "vecini" egali(primul si ultimul element de considerat vecine).
Se sterge elementul imediat ce e gasit sau mai intai se cauta toate perechile care indeplinesc conditita de stergere ?
Răspunsuri la întrebare
Program C++
#include <iostream>
using namespace std;
struct nod
{
char info;
nod* next=NULL, * back=NULL;
};
nod* construieste_nod(nod* anterior) {
nod* curent = new nod;
curent->back = anterior;
anterior->next = curent;
cout << "\nValoare nod : ";
cin >> curent->info;
return curent;
}
nod* sterge_nod(nod* nod_de_sters) {
(nod_de_sters->back)->next = nod_de_sters->next;
(nod_de_sters->next)->back = nod_de_sters->back;
nod* temp = nod_de_sters->next;
delete nod_de_sters;
return temp;
}
bool se_sterge(nod* curent) {
if ((curent->back)->info == (curent->next)->info) return 1;
return 0;
}
void sterge_noduri_vecini_egali(nod* start) {
while (se_sterge(start))
start = sterge_nod(start);
nod* curent=start->next;
while (curent != start) {
if (se_sterge(curent))
curent = sterge_nod(curent);
else curent = curent->next;
}
}
void afisare_lista(nod* start) {
nod* curent = start;
cout << curent->info << " ";
curent = curent->next;
while (curent != start) {
cout << curent->info << " ";
curent = curent->next;
}
}
int main() {
nod* start=new nod;
int nr_noduri;
//Citire si construire noduri
cout << "Nr noduri : ", cin >> nr_noduri;
cout << "Valoare nod :", cin >> start->info;
nod* curent=start;
while (--nr_noduri) {
curent=construieste_nod(curent);
}
curent->next = start;
start->back = curent;
sterge_noduri_vecini_egali(start);
afisare_lista(start);
}
Ce sa