1182 – FListă Interclasare3

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 * 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ă înaintea fiecărui element par al unei liste pentru care primul element are adresa memorată în pointerul p dublul acelui element.

Restricții și precizări

  • lista va conține cel puțin un element
  • la ieșirea din apel p va conține adresa primului element al listei
  • rezolvarea se va face în python

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

#1182 FListaInserare3
class Node:
  def __init__(self, info, next_node=None):
    self.info = info
    self.next = next_node

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

def print_list(p):
  current = p
  while current is not None:
    print(current.info, end=" ")
    current = current.next
  print()

if __name__ == "__main__":
  values = [1, 2, 3, 4, 5]
  p = Node(values[0])  
  current = p
  for value in values[1:]:  
    current.next = Node(value)  
    current = current.next  

  print("Lista initiala:")
  print_list(p)

  inserare(p)

  print("Lista dupa inserare:")
  print_list(p)