Dynamic9. Даны указатели \(P_1\) и \(P_2\) на вершины двух непустых стеков. Перемещать элементы из первого стека во второй, пока значение вершины первого стека не станет четным (перемещенные элементы первого стека будут располагаться во втором стеке в порядке, обратном исходному). Если в первом стеке нет элементов с четными значениями, то переместить из первого стека во второй все элементы. Вывести адреса новых вершин первого и второго стека (если первый стек окажется пустым, то вывести для него константу NIL). Операции выделения и освобождения памяти не использовать.

Решение на Python 3:

import random

N = random.randrange(0,10)
stack1 = []
for i in range(N):
D = random.randrange(-10,10)
stack1.append(D)
print("Stack 1: ", stack1)
print("Number of stack 1 items: ", len(stack1))
print("id of last item (P1): ",end="")
if len(stack1)>0:
print(id(stack1[-1]))
else:
print("null")


N = random.randrange(0,10)
stack2 = []
for i in range(N):
D = random.randrange(-10,10)
stack2.append(D)
print("Stack 2: ", stack2)
print("Number of stack 2 items: ", len(stack2))
print("id of last item (P2): ",end="")
if len(stack2)>0:
print(id(stack2[-1]))
else:
print("null")

print()
print("Moving items from stack 1 to stack 2:")
K = 0
while stack1:
try:
D = stack1[-1]
if D%2 == 1:
stack2.append(D)
stack1.pop()
print("Moved item: ", D)
else:
break
except:
print("Retrieving error")

print()
print("Stack1 after retrieving: ", stack1)
print("Number of stack1 items: ", len(stack1))
print()
print("Stack2 after retrieving: ", stack2)
print("Number of stack2 items: ", len(stack2))
print("id of last item (P2): ", id(stack2[-1]))