1173 – FListă Numărare1

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 întreg, iar câmpul urm memorează adresa următorului element al listei.

Cerinţa

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

   int numarare(nod * p);

care determina și returnează numărul perechi de elemente consecutive egale din lista pentru care primul element are adresa memorată în pointerul p.

Exemplu

Dacă lista contine valorile (1 6 6 4 5 5 5 1) funcția va returna valoarea 3.

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

#1173 FListaNumarare1
class Node:
  def __init__(self, info):
    self.info = info
    self.next = None

def build_linked_list(values):
  if not values:
    return None
  
  head = Node(values[0])
  current = head
  
  for value in values[1:]:
    current.next = Node(value)
    current = current.next
  
  return head

def numarare(p):
  if p is None:
    return 0
  
  count = 0
  current = p
  
  while current.next is not None:
    if current.info == current.next.info:
      count += 1
    current = current.next
  
  return count

# Exemplu de utilizare
def main():
  values = [1, 6, 6, 4, 5, 5, 5, 1]
  head = build_linked_list(values)
  
  result = numarare(head)
  print("Numărul de perechi de elemente consecutive egale:", result)

if __name__ == "__main__":
  main()