#include <iostream>
using namespace std;
struct Node {
int key;
Node *next;
};
struct Stack {
Node* pHead;
};
Node* createNode(int data) {
Node* newNode = new Node;
newNode->key = data;
newNode->next = nullptr;
return newNode;
}
bool isEmpty(Stack s) {
if (s.pHead == nullptr) return true;
return false;
}
void push(Stack &s, int data) {
Node* newNode = createNode(data);
if (isEmpty(s) == true) {
s.pHead = newNode;
return;
}
newNode->next = s.pHead;
s.pHead = newNode;
}
int top(Stack s) {
if (isEmpty(s) == true) return 0;
return s.pHead->key;
}
void pop(Stack &s) {
if (isEmpty(s) == true) return;
Node* curNode = s.pHead->next;
delete s.pHead;
s.pHead = curNode;
}
void show(Stack s) {
Node* curNode = s.pHead;
while (curNode != nullptr) {
cout<<curNode->key<<" ";
curNode = curNode->next;
}
}
int main() {
Stack s1, s2;
s1.pHead = nullptr;
push(s1, 10);
push(s1, 2);
push(s1, 20);
show(s1);
cout<<"\n";
s2.pHead = nullptr;
while (isEmpty(s1) == false) {
push(s2, top(s1));
pop(s1);
}
show(s2);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBOb2RlIHsKICAgIGludCBrZXk7CiAgICBOb2RlICpuZXh0Owp9OwoKc3RydWN0IFN0YWNrIHsKICAgIE5vZGUqIHBIZWFkOwp9OwoKTm9kZSogY3JlYXRlTm9kZShpbnQgZGF0YSkgewogICAgTm9kZSogbmV3Tm9kZSA9IG5ldyBOb2RlOwogICAgbmV3Tm9kZS0+a2V5ID0gZGF0YTsKICAgIG5ld05vZGUtPm5leHQgPSBudWxscHRyOwogICAgcmV0dXJuIG5ld05vZGU7Cn0KCmJvb2wgaXNFbXB0eShTdGFjayBzKSB7CiAgICBpZiAocy5wSGVhZCA9PSBudWxscHRyKSByZXR1cm4gdHJ1ZTsKcmV0dXJuIGZhbHNlOwp9Cgp2b2lkIHB1c2goU3RhY2sgJnMsIGludCBkYXRhKSB7CiAgICBOb2RlKiBuZXdOb2RlID0gY3JlYXRlTm9kZShkYXRhKTsKICAgIGlmIChpc0VtcHR5KHMpID09IHRydWUpIHsKICAgICAgICBzLnBIZWFkID0gbmV3Tm9kZTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbmV3Tm9kZS0+bmV4dCA9IHMucEhlYWQ7CiAgICBzLnBIZWFkID0gbmV3Tm9kZTsKfQoKaW50IHRvcChTdGFjayBzKSB7CiAgICBpZiAoaXNFbXB0eShzKSA9PSB0cnVlKSByZXR1cm4gMDsKCnJldHVybiBzLnBIZWFkLT5rZXk7Cn0KCnZvaWQgcG9wKFN0YWNrICZzKSB7CiAgICBpZiAoaXNFbXB0eShzKSA9PSB0cnVlKSByZXR1cm47CgogICAgTm9kZSogY3VyTm9kZSA9IHMucEhlYWQtPm5leHQ7CiAgICBkZWxldGUgcy5wSGVhZDsKICAgIHMucEhlYWQgPSBjdXJOb2RlOwp9Cgp2b2lkIHNob3coU3RhY2sgcykgewogICAgTm9kZSogY3VyTm9kZSA9IHMucEhlYWQ7CiAgICB3aGlsZSAoY3VyTm9kZSAhPSBudWxscHRyKSB7CiAgICAgICAgY291dDw8Y3VyTm9kZS0+a2V5PDwiICI7CiAgICAgICAgY3VyTm9kZSA9IGN1ck5vZGUtPm5leHQ7CiAgICB9Cn0KCmludCBtYWluKCkgewogICAgU3RhY2sgczEsIHMyOwogICAgczEucEhlYWQgPSBudWxscHRyOwogICAgcHVzaChzMSwgMTApOwogICAgcHVzaChzMSwgMik7CiAgICBwdXNoKHMxLCAyMCk7CiAgICBzaG93KHMxKTsKCiAgICBjb3V0PDwiXG4iOwogICAgczIucEhlYWQgPSBudWxscHRyOwogICAgd2hpbGUgKGlzRW1wdHkoczEpID09IGZhbHNlKSB7CiAgICAgICAgcHVzaChzMiwgdG9wKHMxKSk7CiAgICAgICAgcG9wKHMxKTsKICAgIH0KCiAgICBzaG93KHMyKTsKfQo=