#include <iostream>
using namespace std;
class Node
{
private:
int value = 0;
Node* next = nullptr;
public:
Node(int v = 0, Node* n = nullptr);
int getValue() const;
void setValue(int v);
Node* getNext() const;
void setNext(Node* n);
};
Node::Node(int v, Node* n) :
value(v),
next(n)
{
}
int Node::getValue() const
{
return value;
}
void Node::setValue(int v)
{
value = v;
}
Node* Node::getNext() const
{
return next;
}
void Node::setNext(Node* n)
{
next = n;
}
class virticalList
{
private:
Node* head = nullptr;
public:
virticalList();
virticalList(const virticalList &p2);
~virticalList();
virticalList& operator=(const virticalList& p2);
void print() const;
void virtInc();
};
virticalList::virticalList() :
head(new Node(10))
{
Node* ptr = head;
for(int i = 11; i < 20; ++i)
{
ptr->setNext(new Node(i));
ptr = ptr->getNext();
}
}
virticalList::virticalList(const virticalList &p2) {
if (p2.head) {
Node* temp = p2.head;
Node* curr = head = new Node(temp->getValue());
while (temp = temp->getNext()) {
curr->setNext(new Node(temp->getValue()));
curr = curr->getNext();
}
}
}
virticalList::~virticalList() {
Node* ptr = head, *next;
while (ptr) {
next = ptr->getNext();
delete ptr;
ptr = next;
}
}
virticalList& virticalList::operator=(const virticalList& p2)
{
if (this != &p2) {
virticalList temp(p2);
//std::swap(head, temp.head);
Node* ptr = head;
head = temp.head;
temp.head = ptr;
}
return *this;
}
void virticalList::print() const
{
Node* ptr = head;
while (ptr) {
cout << ptr->getValue() << " ";
ptr = ptr->getNext();
}
cout << "\n";
}
void virticalList::virtInc()
{
Node* ptr = head;
while (ptr) {
ptr->setValue(ptr->getValue()+1);
ptr = ptr->getNext();
}
}
int main() {
virticalList l1, l2;
l2.virtInc();
l1.print();
l1 = l2;
l1.print();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgTm9kZQp7CnByaXZhdGU6CglpbnQgdmFsdWUgPSAwOwoJTm9kZSogbmV4dCA9IG51bGxwdHI7CgpwdWJsaWM6CglOb2RlKGludCB2ID0gMCwgTm9kZSogbiA9IG51bGxwdHIpOwoJaW50IGdldFZhbHVlKCkgY29uc3Q7Cgl2b2lkIHNldFZhbHVlKGludCB2KTsKCU5vZGUqIGdldE5leHQoKSBjb25zdDsKCXZvaWQgc2V0TmV4dChOb2RlKiBuKTsKfTsKCk5vZGU6Ok5vZGUoaW50IHYsIE5vZGUqIG4pIDoKICAgIHZhbHVlKHYpLAoJbmV4dChuKQp7Cn0KCmludCBOb2RlOjpnZXRWYWx1ZSgpIGNvbnN0CnsKICAgIHJldHVybiB2YWx1ZTsKfQoKdm9pZCBOb2RlOjpzZXRWYWx1ZShpbnQgdikKewogICAgdmFsdWUgPSB2Owp9CgpOb2RlKiBOb2RlOjpnZXROZXh0KCkgY29uc3QKewogICAgcmV0dXJuIG5leHQ7Cn0KCnZvaWQgTm9kZTo6c2V0TmV4dChOb2RlKiBuKQp7CiAgICBuZXh0ID0gbjsKfQoKY2xhc3MgdmlydGljYWxMaXN0CnsKcHJpdmF0ZToKICAgIE5vZGUqIGhlYWQgPSBudWxscHRyOwoKcHVibGljOgogICAgdmlydGljYWxMaXN0KCk7CiAgICB2aXJ0aWNhbExpc3QoY29uc3QgdmlydGljYWxMaXN0ICZwMik7CiAgICB+dmlydGljYWxMaXN0KCk7CgogICAgdmlydGljYWxMaXN0JiBvcGVyYXRvcj0oY29uc3QgdmlydGljYWxMaXN0JiBwMik7CgogICAgdm9pZCBwcmludCgpIGNvbnN0OwogICAgdm9pZCB2aXJ0SW5jKCk7Cn07Cgp2aXJ0aWNhbExpc3Q6OnZpcnRpY2FsTGlzdCgpIDoKCWhlYWQobmV3IE5vZGUoMTApKQp7CglOb2RlKiBwdHIgPSBoZWFkOwogICAgZm9yKGludCBpID0gMTE7IGkgPCAyMDsgKytpKQogICAgewogICAgICAgIHB0ci0+c2V0TmV4dChuZXcgTm9kZShpKSk7CiAgICAgICAgcHRyID0gcHRyLT5nZXROZXh0KCk7CiAgICB9Cn0KCnZpcnRpY2FsTGlzdDo6dmlydGljYWxMaXN0KGNvbnN0IHZpcnRpY2FsTGlzdCAmcDIpIHsKCWlmIChwMi5oZWFkKSB7CgkJTm9kZSogdGVtcCA9IHAyLmhlYWQ7CgkJTm9kZSogY3VyciA9IGhlYWQgPSBuZXcgTm9kZSh0ZW1wLT5nZXRWYWx1ZSgpKTsKCQl3aGlsZSAodGVtcCA9IHRlbXAtPmdldE5leHQoKSkgewoJCQljdXJyLT5zZXROZXh0KG5ldyBOb2RlKHRlbXAtPmdldFZhbHVlKCkpKTsKCQkJY3VyciA9IGN1cnItPmdldE5leHQoKTsKCQl9Cgl9Cn0KCnZpcnRpY2FsTGlzdDo6fnZpcnRpY2FsTGlzdCgpIHsKICAgIE5vZGUqIHB0ciA9IGhlYWQsICpuZXh0OwogICAgd2hpbGUgKHB0cikgewoJCW5leHQgPSBwdHItPmdldE5leHQoKTsKICAgICAgICBkZWxldGUgcHRyOwogICAgICAgIHB0ciA9IG5leHQ7CiAgICB9Cn0KCnZpcnRpY2FsTGlzdCYgdmlydGljYWxMaXN0OjpvcGVyYXRvcj0oY29uc3QgdmlydGljYWxMaXN0JiBwMikKewoJaWYgKHRoaXMgIT0gJnAyKSB7CgkJdmlydGljYWxMaXN0IHRlbXAocDIpOwoJCS8vc3RkOjpzd2FwKGhlYWQsIHRlbXAuaGVhZCk7CgkJTm9kZSogcHRyID0gaGVhZDsKCQloZWFkID0gdGVtcC5oZWFkOwoJCXRlbXAuaGVhZCA9IHB0cjsKCX0KICAgIHJldHVybiAqdGhpczsKfQoKdm9pZCB2aXJ0aWNhbExpc3Q6OnByaW50KCkgY29uc3QKewoJTm9kZSogcHRyID0gaGVhZDsKCXdoaWxlIChwdHIpIHsKCQljb3V0IDw8IHB0ci0+Z2V0VmFsdWUoKSA8PCAiICI7CgkJcHRyID0gcHRyLT5nZXROZXh0KCk7Cgl9Cgljb3V0IDw8ICJcbiI7Cn0KCnZvaWQgdmlydGljYWxMaXN0Ojp2aXJ0SW5jKCkKewogICAgTm9kZSogcHRyID0gaGVhZDsKICAgIHdoaWxlIChwdHIpIHsKCQlwdHItPnNldFZhbHVlKHB0ci0+Z2V0VmFsdWUoKSsxKTsKCQlwdHIgPSBwdHItPmdldE5leHQoKTsKICAgIH0KfQoKaW50IG1haW4oKSB7Cgl2aXJ0aWNhbExpc3QgbDEsIGwyOwoJbDIudmlydEluYygpOwoKCWwxLnByaW50KCk7CglsMSA9IGwyOwoJbDEucHJpbnQoKTsKCglyZXR1cm4gMDsKfQ==