#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);
friend class virticalList;
};
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()
{
Node** ptr = &head;
for(int i = 10; i < 20; ++i)
{
*ptr = new Node(i);
ptr = &((*ptr)->next);
}
}
virticalList::virticalList(const virticalList &p2) {
Node** curr = &head;
Node* temp = p2.head;
while (temp) {
*curr = new Node(temp->getValue());
curr = &((*curr)->next);
temp = temp->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;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgTm9kZQp7CnByaXZhdGU6CglpbnQgdmFsdWUgPSAwOwoJTm9kZSogbmV4dCA9IG51bGxwdHI7CgpwdWJsaWM6CglOb2RlKGludCB2ID0gMCwgTm9kZSogbiA9IG51bGxwdHIpOwoJaW50IGdldFZhbHVlKCkgY29uc3Q7Cgl2b2lkIHNldFZhbHVlKGludCB2KTsKCU5vZGUqIGdldE5leHQoKSBjb25zdDsKCXZvaWQgc2V0TmV4dChOb2RlKiBuKTsKCiAgICBmcmllbmQgY2xhc3MgdmlydGljYWxMaXN0Owp9OwoKTm9kZTo6Tm9kZShpbnQgdiwgTm9kZSogbikgOgogICAgdmFsdWUodiksCgluZXh0KG4pCnsKfQoKaW50IE5vZGU6OmdldFZhbHVlKCkgY29uc3QKewogICAgcmV0dXJuIHZhbHVlOwp9Cgp2b2lkIE5vZGU6OnNldFZhbHVlKGludCB2KQp7CiAgICB2YWx1ZSA9IHY7Cn0KCk5vZGUqIE5vZGU6OmdldE5leHQoKSBjb25zdAp7CiAgICByZXR1cm4gbmV4dDsKfQoKdm9pZCBOb2RlOjpzZXROZXh0KE5vZGUqIG4pCnsKICAgIG5leHQgPSBuOwp9CgpjbGFzcyB2aXJ0aWNhbExpc3QKewpwcml2YXRlOgogICAgTm9kZSogaGVhZCA9IG51bGxwdHI7CgpwdWJsaWM6CiAgICB2aXJ0aWNhbExpc3QoKTsKICAgIHZpcnRpY2FsTGlzdChjb25zdCB2aXJ0aWNhbExpc3QgJnAyKTsKICAgIH52aXJ0aWNhbExpc3QoKTsKCiAgICB2aXJ0aWNhbExpc3QmIG9wZXJhdG9yPShjb25zdCB2aXJ0aWNhbExpc3QmIHAyKTsKCiAgICB2b2lkIHByaW50KCkgY29uc3Q7CiAgICB2b2lkIHZpcnRJbmMoKTsKfTsKCnZpcnRpY2FsTGlzdDo6dmlydGljYWxMaXN0KCkKewoJTm9kZSoqIHB0ciA9ICZoZWFkOwogICAgZm9yKGludCBpID0gMTA7IGkgPCAyMDsgKytpKQogICAgewogICAgICAgICpwdHIgPSBuZXcgTm9kZShpKTsKICAgICAgICBwdHIgPSAmKCgqcHRyKS0+bmV4dCk7CiAgICB9Cn0KCnZpcnRpY2FsTGlzdDo6dmlydGljYWxMaXN0KGNvbnN0IHZpcnRpY2FsTGlzdCAmcDIpIHsKCU5vZGUqKiBjdXJyID0gJmhlYWQ7CglOb2RlKiB0ZW1wID0gcDIuaGVhZDsKCXdoaWxlICh0ZW1wKSB7CgkJKmN1cnIgPSBuZXcgTm9kZSh0ZW1wLT5nZXRWYWx1ZSgpKTsKCQljdXJyID0gJigoKmN1cnIpLT5uZXh0KTsKCQl0ZW1wID0gdGVtcC0+Z2V0TmV4dCgpOwoJfQp9Cgp2aXJ0aWNhbExpc3Q6On52aXJ0aWNhbExpc3QoKSB7CiAgICBOb2RlKiBwdHIgPSBoZWFkLCAqbmV4dDsKICAgIHdoaWxlIChwdHIpIHsKCQluZXh0ID0gcHRyLT5nZXROZXh0KCk7CiAgICAgICAgZGVsZXRlIHB0cjsKICAgICAgICBwdHIgPSBuZXh0OwogICAgfQp9Cgp2aXJ0aWNhbExpc3QmIHZpcnRpY2FsTGlzdDo6b3BlcmF0b3I9KGNvbnN0IHZpcnRpY2FsTGlzdCYgcDIpCnsKCWlmICh0aGlzICE9ICZwMikgewoJCXZpcnRpY2FsTGlzdCB0ZW1wKHAyKTsKCQkvL3N0ZDo6c3dhcChoZWFkLCB0ZW1wLmhlYWQpOwoJCU5vZGUqIHB0ciA9IGhlYWQ7CgkJaGVhZCA9IHRlbXAuaGVhZDsKCQl0ZW1wLmhlYWQgPSBwdHI7Cgl9CiAgICByZXR1cm4gKnRoaXM7Cn0KCnZvaWQgdmlydGljYWxMaXN0OjpwcmludCgpIGNvbnN0CnsKCU5vZGUqIHB0ciA9IGhlYWQ7Cgl3aGlsZSAocHRyKSB7CgkJY291dCA8PCBwdHItPmdldFZhbHVlKCkgPDwgIiAiOwoJCXB0ciA9IHB0ci0+Z2V0TmV4dCgpOwoJfQoJY291dCA8PCAiXG4iOwp9Cgp2b2lkIHZpcnRpY2FsTGlzdDo6dmlydEluYygpCnsKICAgIE5vZGUqIHB0ciA9IGhlYWQ7CiAgICB3aGlsZSAocHRyKSB7CgkJcHRyLT5zZXRWYWx1ZShwdHItPmdldFZhbHVlKCkrMSk7CgkJcHRyID0gcHRyLT5nZXROZXh0KCk7CiAgICB9Cn0KCmludCBtYWluKCkgewoJdmlydGljYWxMaXN0IGwxLCBsMjsKCWwyLnZpcnRJbmMoKTsKCglsMS5wcmludCgpOwoJbDEgPSBsMjsKCWwxLnByaW50KCk7CgoJcmV0dXJuIDA7Cn0=