#include <iostream>
#include <initializer_list>
struct Node
{
char data;
Node* next_node = nullptr;
Node(const char& a) // create a constrcor which will initilize data
: data(a) {} // at the time of Node creation
};
namespace mylib{
class list
{
private:
Node *head = nullptr; // need only head, if it's a simple list
public:
list() :head(nullptr) {} // constructor set it to nullptr
list(std::initializer_list<int> arr) // initilizer list constructor
{
for(const auto& it: arr)
this->insert(it);
}
~list()
{
Node* temp = head;
while( temp != nullptr )
{
Node* next = temp->next_node;
delete temp;
temp = next;
}
head = nullptr;
}
void insert(const char& value)
{
if(head == nullptr) // first case
{
Node *newNode = new Node(value);
newNode->next_node = head;
head = newNode;
}
else // all new nodes
{
Node *temp = head;
while(temp->next_node != nullptr) // to find the null point (end of list)
temp = temp->next_node;
temp = temp->next_node = new Node(value);
}
}
void print() const // just to print
{
Node *temp = head;
while(temp != nullptr)
{
std::cout << temp->data << "\n";
temp = temp->next_node;
}
}
};
}
int main()
{
mylib::list myList = {'a', 'b', 'c' , 'a' };
myList.print();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW5pdGlhbGl6ZXJfbGlzdD4KIApzdHJ1Y3QgTm9kZQp7CiAgIGNoYXIgZGF0YTsKICAgTm9kZSogIG5leHRfbm9kZSA9IG51bGxwdHI7CiAgIE5vZGUoY29uc3QgY2hhciYgYSkgIC8vIGNyZWF0ZSBhIGNvbnN0cmNvciB3aGljaCB3aWxsIGluaXRpbGl6ZSBkYXRhCiAgICAgIDogZGF0YShhKSB7fSAgICAgIC8vIGF0IHRoZSB0aW1lIG9mIE5vZGUgY3JlYXRpb24KfTsKIApuYW1lc3BhY2UgbXlsaWJ7CmNsYXNzIGxpc3QKewpwcml2YXRlOgogICBOb2RlICpoZWFkID0gbnVsbHB0cjsgICAgICAgICAgICAgLy8gbmVlZCBvbmx5IGhlYWQsIGlmIGl0J3MgYSBzaW1wbGUgbGlzdApwdWJsaWM6CiAgIGxpc3QoKSAgIDpoZWFkKG51bGxwdHIpIHt9ICAgLy8gY29uc3RydWN0b3Igc2V0IGl0IHRvIG51bGxwdHIKICAgbGlzdChzdGQ6OmluaXRpYWxpemVyX2xpc3Q8aW50PiBhcnIpICAvLyBpbml0aWxpemVyIGxpc3QgY29uc3RydWN0b3IKICAgewogICAgICBmb3IoY29uc3QgYXV0byYgaXQ6IGFycikKICAgICAgICAgdGhpcy0+aW5zZXJ0KGl0KTsKICAgfQogICB+bGlzdCgpCiAgIHsKICAgICAgICBOb2RlKiB0ZW1wID0gaGVhZDsKICAgICAgICB3aGlsZSggdGVtcCAhPSBudWxscHRyICkKICAgICAgICB7CiAgICAgICAgICAgIE5vZGUqIG5leHQgPSB0ZW1wLT5uZXh0X25vZGU7CiAgICAgICAgICAgIGRlbGV0ZSB0ZW1wOwogICAgICAgICAgICB0ZW1wID0gbmV4dDsKICAgICAgICB9CiAgICAgICAgaGVhZCA9IG51bGxwdHI7CiAgIH0KIAogCiAgIHZvaWQgaW5zZXJ0KGNvbnN0IGNoYXImIHZhbHVlKQogICB7CiAgICAgICAgaWYoaGVhZCA9PSBudWxscHRyKSAvLyBmaXJzdCBjYXNlCiAgICAgICAgewogICAgICAgICAgICBOb2RlICpuZXdOb2RlID0gbmV3IE5vZGUodmFsdWUpOwogICAgICAgICAgICBuZXdOb2RlLT5uZXh0X25vZGUgPSBoZWFkOwogICAgICAgICAgICBoZWFkID0gbmV3Tm9kZTsKICAgICAgICB9CiAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbGwgbmV3IG5vZGVzCiAgICAgICAgewogICAgICAgICAgICBOb2RlICp0ZW1wID0gaGVhZDsKICAgICAgICAgICAgd2hpbGUodGVtcC0+bmV4dF9ub2RlICE9IG51bGxwdHIpIC8vIHRvIGZpbmQgdGhlIG51bGwgcG9pbnQgKGVuZCBvZiBsaXN0KQogICAgICAgICAgICAgICAgdGVtcCA9IHRlbXAtPm5leHRfbm9kZTsKIAogICAgICAgICAgICB0ZW1wID0gdGVtcC0+bmV4dF9ub2RlID0gbmV3IE5vZGUodmFsdWUpOwogICAgICAgIH0KICAgIH0KIAogICAgdm9pZCBwcmludCgpIGNvbnN0ICAgICAgLy8ganVzdCB0byBwcmludAogICAgewogICAgICAgIE5vZGUgKnRlbXAgPSBoZWFkOwogICAgICAgIHdoaWxlKHRlbXAgIT0gbnVsbHB0cikKICAgICAgICB7CiAgICAgICAgICAgIHN0ZDo6Y291dCA8PCB0ZW1wLT5kYXRhIDw8ICJcbiI7CiAgICAgICAgICAgIHRlbXAgPSB0ZW1wLT5uZXh0X25vZGU7CiAgICAgICAgfQogICAgfQp9Owp9CiAKaW50IG1haW4oKQp7CiAgIG15bGliOjpsaXN0IG15TGlzdCA9IHsnYScsICdiJywgJ2MnICwgJ2EnIH07CiAKICAgbXlMaXN0LnByaW50KCk7CiAKICAgcmV0dXJuIDA7Cn0=