4164 – FadaugăÎnainte

De la Universitas MediaWiki

Enunţ

Se consideră o listă liniară simplu înlănțuită, alocată dinamic, în care elementele sunt de tipul declarat mai jos:

   struct Nod{
     int info;
     Nod *leg;
   };

în care câmpul info memorează un număr întreg, iar câmpul leg memorează adresa următorului element al listei.

Cerinţa

Să se scrie o funcție C++ cu următorul prototip:

   void FAdaugaInainte(Nod * &head);

care, în lista pentru care primul element are adresa memorată în pointerul head, inserează inainte de fiecare nod cu informația impară dublul său. Lista are inițial cel puțin un element. Dacă lista nu are noduri cu informația impară, lista rămâne neschimbată. De exemplu, dacă lista conține inițial informațiile 1,7,3,4,13, atunci la final lista va fi: 2,1,14,7,6,3,4,26,13.

Important

Se va rezolva în python. 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.

Rezolvare

#4164 FAdaugaInainte
class Nod:
  def __init__(self, info):
    self.info = info
    self.leg = None

def FAdaugaInainte(head):
  nod_curent = head
  while nod_curent is not None:
    if nod_curent.info % 2 != 0:
      nod_nou = Nod(nod_curent.info * 2)
      nod_nou.leg = nod_curent
      if nod_curent == head:
        head = nod_nou
      else:
        nod_anterior.leg = nod_nou
    nod_anterior = nod_curent
    nod_curent = nod_curent.leg

  return head

def afisare(head):
  nod_curent = head
  while nod_curent is not None:
    print(nod_curent.info, end=" ")
    nod_curent = nod_curent.leg
  print()

# Exemplu de utilizare
def main():
  # Construim lista liniară simplu înlănțuită de test
  head = Nod(1)
  head.leg = Nod(7)
  head.leg.leg = Nod(3)
  head.leg.leg.leg = Nod(4)
  head.leg.leg.leg.leg = Nod(13)

  print("Lista initiala:")
  afisare(head)

  # Apelam functia FAdaugaInainte pentru a insera dublul valorilor impare inaintea fiecarei valori impare
  head = FAdaugaInainte(head)

  print("Lista dupa inserare:")
  afisare(head)

if __name__ == "__main__":
  main()