#include <iostream>
struct node
{
int data;
node* next;
};
node *head = NULL;
void insertFirst(int data)
{
node *newNode = new node;
newNode->data = data;
newNode->next = head;
head = newNode;
}
void deleteFirst()
{
if (head != NULL)
{
node *temp = head;
head = head->next;
delete temp;
}
}
void deleteLast()
{
if (head != NULL)
{
node **temp = &head;
while ((*temp)->next != NULL) {
temp = &((*temp)->next);
}
delete *temp;
*temp = NULL;
}
}
void deleteAll()
{
while (head != NULL)
{
node *temp = head->next;
delete head;
head = temp;
}
}
void print()
{
if (head != NULL)
{
node *temp = head;
while (temp != NULL)
{
std::cout << temp->data << " ";
temp = temp->next;
}
}
else
std::cout << "<empty>";
std::cout << "\n";
}
int main()
{
insertFirst(10);
insertFirst(20);
insertFirst(30);
print();
deleteLast();
insertFirst(40);
print();
deleteAll();
print();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IG5vZGUKewogICAgaW50IGRhdGE7CiAgICBub2RlKiBuZXh0Owp9Owpub2RlICpoZWFkID0gTlVMTDsKCnZvaWQgaW5zZXJ0Rmlyc3QoaW50IGRhdGEpCnsKICAgIG5vZGUgKm5ld05vZGUgPSBuZXcgbm9kZTsKICAgIG5ld05vZGUtPmRhdGEgPSBkYXRhOwogICAgbmV3Tm9kZS0+bmV4dCA9IGhlYWQ7CiAgICBoZWFkID0gbmV3Tm9kZTsKfQoKdm9pZCBkZWxldGVGaXJzdCgpCnsKICAgIGlmIChoZWFkICE9IE5VTEwpCiAgICB7CiAgICAgICAgbm9kZSAqdGVtcCA9IGhlYWQ7CiAgICAgICAgaGVhZCA9IGhlYWQtPm5leHQ7CiAgICAgICAgZGVsZXRlIHRlbXA7CiAgICB9Cn0KCnZvaWQgZGVsZXRlTGFzdCgpCnsKICAgIGlmIChoZWFkICE9IE5VTEwpCiAgICB7CiAgICAgICAgbm9kZSAqKnRlbXAgPSAmaGVhZDsKCiAgICAgICAgd2hpbGUgKCgqdGVtcCktPm5leHQgIT0gTlVMTCkgewogICAgICAgICAgICB0ZW1wID0gJigoKnRlbXApLT5uZXh0KTsKICAgICAgICB9CgogICAgICAgIGRlbGV0ZSAqdGVtcDsKICAgICAgICAqdGVtcCA9IE5VTEw7CiAgICB9Cn0KCnZvaWQgZGVsZXRlQWxsKCkKewogICAgd2hpbGUgKGhlYWQgIT0gTlVMTCkKICAgIHsKICAgICAgICBub2RlICp0ZW1wID0gaGVhZC0+bmV4dDsKICAgICAgICBkZWxldGUgaGVhZDsKICAgICAgICBoZWFkID0gdGVtcDsKICAgIH0KfQoKdm9pZCBwcmludCgpCnsKICAgIGlmIChoZWFkICE9IE5VTEwpCiAgICB7CgkgICAgbm9kZSAqdGVtcCA9IGhlYWQ7CiAgICAJd2hpbGUgKHRlbXAgIT0gTlVMTCkKICAgIAl7CiAgICAgICAgCXN0ZDo6Y291dCA8PCB0ZW1wLT5kYXRhIDw8ICIgIjsKICAgICAgICAJdGVtcCA9IHRlbXAtPm5leHQ7CiAgICAJfQogICAgfQogICAgZWxzZQogICAgCXN0ZDo6Y291dCA8PCAiPGVtcHR5PiI7CiAgICBzdGQ6OmNvdXQgPDwgIlxuIjsKfQoKaW50IG1haW4oKQp7CiAgICBpbnNlcnRGaXJzdCgxMCk7CiAgICBpbnNlcnRGaXJzdCgyMCk7CiAgICBpbnNlcnRGaXJzdCgzMCk7CiAgICBwcmludCgpOwoKICAgIGRlbGV0ZUxhc3QoKTsKICAgIGluc2VydEZpcnN0KDQwKTsKICAgIHByaW50KCk7CgogICAgZGVsZXRlQWxsKCk7CiAgICBwcmludCgpOwoKICAgIHJldHVybiAwOwp9