Se consideră o listă liniară simplu înlănțuită, alocată dinamic, în care elementele sunt de tipul declarat mai jos:
struct node { char key; node *next; };
în care câmpul key
memorează un caracter, iar câmpul next
memorează adresa următorului element al listei
Cerința
Să se scrie o funcție C++ cu următorul prototip:
bool palindrom(node *l);
care returnează true
în caz ca lista al cărei prim element are adresa memorată în l
formează un palindrom, iar false
în caz contrar.
Un palindrom este un șir care citit de la stânga la dreapta sau de la dreapta la stânga rămâne neschimbat.
Restricții și precizări
- numele funcției va fi
palindrom
- lista va conține cel puțin
2
elemente 2
caractere sunt considerate egale daca au acelaşi cod ASCII
Exemplu
Dacă lista conține valorile (r a d a r)
funcția va returna true
, iar dacă lista conține (a B b a)
sau (l i n u x)
funcția va returna false
.
Important
Soluţia propusă va conţine definiţia funcţiei cerute. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei. La ieșirea din subprogram lista nu va fi modificată.
bool palindrom(node *l) { node* pi = l; int a[10001]; int n = 0; while (pi != NULL) { a[n] = pi ->key; n ++; pi = pi -> next; } for (int i = 0 ; i < n; i ++) if (a[i] != a[n - i - 1])return false; return true; }