1182 – FListă Interclasare3
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
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
<syntaxhighlight lang="python" line>
- 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)
</syntaxhighlight>