1181 – FListă Interclasare2

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

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 * urm;
   };

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

Cerinţa

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

   void inserare(nod * p);

care inserează după fiecare element par al unei liste pentru care primul element are adresa memorată în pointerul p dublul acelui element.

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

#1181 FListaInserare2
class Node:
  def __init__(self, info):
    self.info = info
    self.urm = None

def inserare(p):
  current = p
  while current is not None:
    if current.info % 2 == 0:
      new_node = Node(2 * current.info)
      new_node.urm = current.urm
      current.urm = new_node
      current = current.urm.urm
    else:
      current = current.urm

def afisare_lista(p):
  current = p
  while current is not None:
    print(current.info)
    current = current.urm

def main():
  # Citirea datelor de intrare de la tastatura
  N = int(input("Introduceti numarul de noduri: "))
  vals = [int(input(f"Introduceti valoarea pentru nodul {i + 1}: ")) for i in range(N)]

  # Crearea listei liniare simplu inlantuite
  noduri = [Node(val) for val in vals]
  for i in range(N - 1):
    noduri[i].urm = noduri[i + 1]

  print("Lista initiala:")
  afisare_lista(noduri[0])

  inserare(noduri[0])

  print("Lista dupa inserare:")
  afisare_lista(noduri[0])

if __name__ == "__main__":
  main()