fbpx

Problema #1256 – FListaVerPalindrom – Rezolvari PBInfo

de Mihai-Alexandru

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;
}
Comentarii

S-ar putea sa iti placa