обмен данными стеков
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
struct Node
{
int data;
Node* nextptr;
};
void Push(Node*&head, int data) {
Node *temp = new Node();
temp->data = data;
temp->nextptr = head;
head = temp;
}
void Pop(Node*& head) {
if (head) {
Node* temp = head->nextptr;
delete head;
head = temp;
}
}
void Clear(Node*& head) {
while (head) {
Pop(head);
}
}
void lout(Node* head) {
Node* temp = head;
while (head) {
cout << head->data << " ";
head = head->nextptr;
}
cout << endl;
}
void first_task(Node* p1, Node* p2) {
Node* tempp1 = p1;
Node* tempp2 = p2;
lout(tempp1);
Clear(p1);
while (tempp2) {
Push(p1, tempp2->data);
tempp2 = tempp2->nextptr;
}
Clear(p2);
while (tempp1) {
Push(p2, tempp1->data);
tempp1 = tempp1->nextptr;
}
lout(p1);
cout << endl;
lout(p2);
}
int main() {
Node *stack1 = nullptr;
Node *stack2 = nullptr;
for (int i = 0; i < 10; i++) {
Push(stack1, i);
}
for (int i = 20; i < 30; i++) {
Push(stack2, i);
}
cout << "Before swap:"<<endl;
lout(stack1);
cout << endl;
lout(stack2);
cout << "After swap:" << endl;
first_task(stack1,stack2);
return 0;
}
В функции first_task() нужно переписать значения первого стека во второй, а со второго в первый. p1 и p2 - указатели на вершины стеков. Стек р1 выводится нормально, а р2 может словить исключение "Вызвано исключение: нарушение доступа для чтения. tempp1 было 0xDDDDDDDD.", может вывести 3 числа из 10, может вывести 5 чисел. Причем это те же значения, что и в стеке tempp2(от 20 до 29), хотя должны выводится значения tempp1(от 0 до 9).