#include <iostream>
using namespace std;
struct node
{
int data;
node *next;
};
class linked_list
{
private:
node *head,*tail;
public:
linked_list()
{
head = NULL;
tail = NULL;
}
node* gethead()
{
return head;
}
void front(int n)
{
node *tmp = new node;
tmp -> data = n;
tmp -> next = head;
head = tmp;
}
void after(node *a, int value)
{
node* p = new node;
p->data = value;
p->next = a->next;
a->next = p;
}
void last(int n)
{
node *tmp = new node;
tmp->data = n;
tmp->next = NULL;
if(head == NULL)
{
head = tmp;
tail = tmp;
}
else
{
tail->next = tmp;
tail = tail->next;
}
}
void display_loop()
{
node *tmp;
tmp = head;
while (tmp != NULL)
{
cout << tmp->data << endl;
tmp = tmp->next;
}
cout << "NULL\n\n" << endl;
}
static void display_rec(node *head)
{
if(head == NULL)
{
cout << "NULL\n\n" << endl;
}
else
{
cout << head->data << endl;
display_rec(head->next);
}
}
void del (node *before_del)
{
node* temp;
temp = before_del->next;
before_del->next = temp->next;
delete temp;
}
void del_first()
{
if (head)
{
node* temp = head;
head = head->next;
delete temp;
}
}
void del_last()
{
node* prev;
node* curr;
if (head==NULL)
{
// empty list
}
else if (head->next==NULL)
{
curr = head;
head = NULL;
delete curr;
}
else
{
curr = head;
while(curr->next != NULL)
{
prev = curr;
curr = curr->next;
}
prev->next = NULL;
delete curr;
}
}
};
int main()
{
linked_list a;
a.last(1);
a.last(2);
a.front(3);
a.display_loop();
linked_list::display_rec(a.gethead());
a.del_last();
linked_list::display_rec(a.gethead());
a.del_first();
a.display_loop();
linked_list::display_rec(a.gethead());
a.del_first();
linked_list::display_rec(a.gethead());
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwpzdHJ1Y3Qgbm9kZQp7CiBpbnQgZGF0YTsKIG5vZGUgKm5leHQ7Cn07CmNsYXNzIGxpbmtlZF9saXN0CnsKcHJpdmF0ZToKIG5vZGUgKmhlYWQsKnRhaWw7CnB1YmxpYzoKIGxpbmtlZF9saXN0KCkKIHsKIGhlYWQgPSBOVUxMOwogdGFpbCA9IE5VTEw7CiB9Cgpub2RlKiBnZXRoZWFkKCkKIHsKIHJldHVybiBoZWFkOwogfQp2b2lkIGZyb250KGludCBuKQp7CiBub2RlICp0bXAgPSBuZXcgbm9kZTsKIHRtcCAtPiBkYXRhID0gbjsKIHRtcCAtPiBuZXh0ID0gaGVhZDsKICBoZWFkID0gdG1wOwp9CiB2b2lkIGFmdGVyKG5vZGUgKmEsIGludCB2YWx1ZSkKIHsKIG5vZGUqIHAgPSBuZXcgbm9kZTsKIHAtPmRhdGEgPSB2YWx1ZTsKIHAtPm5leHQgPSBhLT5uZXh0OwogYS0+bmV4dCA9IHA7CiB9CiB2b2lkIGxhc3QoaW50IG4pCiB7CiBub2RlICp0bXAgPSBuZXcgbm9kZTsKIHRtcC0+ZGF0YSA9IG47CiB0bXAtPm5leHQgPSBOVUxMOwogaWYoaGVhZCA9PSBOVUxMKQogewogaGVhZCA9IHRtcDsKIHRhaWwgPSB0bXA7CiB9CiBlbHNlCiB7CiB0YWlsLT5uZXh0ID0gdG1wOwogdGFpbCA9IHRhaWwtPm5leHQ7CiB9CiB9CiB2b2lkIGRpc3BsYXlfbG9vcCgpCiB7CiBub2RlICp0bXA7CiB0bXAgPSBoZWFkOwogd2hpbGUgKHRtcCAhPSBOVUxMKQogewogY291dCA8PCB0bXAtPmRhdGEgPDwgZW5kbDsKIHRtcCA9IHRtcC0+bmV4dDsKIH0KIGNvdXQgPDwgIk5VTExcblxuIiA8PCBlbmRsOwogfQogc3RhdGljIHZvaWQgZGlzcGxheV9yZWMobm9kZSAqaGVhZCkKIHsKIGlmKGhlYWQgPT0gTlVMTCkKIHsKIGNvdXQgPDwgIk5VTExcblxuIiA8PCBlbmRsOwogfQogZWxzZQogIHsKIGNvdXQgPDwgaGVhZC0+ZGF0YSA8PCBlbmRsOwogZGlzcGxheV9yZWMoaGVhZC0+bmV4dCk7CiB9CiB9CnZvaWQgZGVsIChub2RlICpiZWZvcmVfZGVsKQp7CiBub2RlKiB0ZW1wOwogdGVtcCA9IGJlZm9yZV9kZWwtPm5leHQ7CiBiZWZvcmVfZGVsLT5uZXh0ID0gdGVtcC0+bmV4dDsKIGRlbGV0ZSB0ZW1wOwp9CnZvaWQgZGVsX2ZpcnN0KCkKewppZiAoaGVhZCkKewogbm9kZSogdGVtcCA9IGhlYWQ7CiBoZWFkID0gaGVhZC0+bmV4dDsKIGRlbGV0ZSB0ZW1wOwp9Cn0Kdm9pZCBkZWxfbGFzdCgpCnsKbm9kZSogcHJldjsKbm9kZSogY3VycjsKaWYgKGhlYWQ9PU5VTEwpCnsKIC8vIGVtcHR5IGxpc3QKfQplbHNlIGlmIChoZWFkLT5uZXh0PT1OVUxMKQp7CiBjdXJyID0gaGVhZDsKIGhlYWQgPSBOVUxMOwogZGVsZXRlIGN1cnI7Cgp9CmVsc2UKewogY3VyciA9IGhlYWQ7CiB3aGlsZShjdXJyLT5uZXh0ICE9IE5VTEwpCiB7CiBwcmV2ID0gY3VycjsKIGN1cnIgPSBjdXJyLT5uZXh0OwogfQogcHJldi0+bmV4dCA9IE5VTEw7CiAgZGVsZXRlIGN1cnI7Cn0KfQp9OwppbnQgbWFpbigpCnsKIGxpbmtlZF9saXN0IGE7CiBhLmxhc3QoMSk7CiBhLmxhc3QoMik7CiBhLmZyb250KDMpOwogYS5kaXNwbGF5X2xvb3AoKTsKCiBsaW5rZWRfbGlzdDo6ZGlzcGxheV9yZWMoYS5nZXRoZWFkKCkpOwogYS5kZWxfbGFzdCgpOwogbGlua2VkX2xpc3Q6OmRpc3BsYXlfcmVjKGEuZ2V0aGVhZCgpKTsKIGEuZGVsX2ZpcnN0KCk7CiBhLmRpc3BsYXlfbG9vcCgpOwogbGlua2VkX2xpc3Q6OmRpc3BsYXlfcmVjKGEuZ2V0aGVhZCgpKTsKIGEuZGVsX2ZpcnN0KCk7CiBsaW5rZWRfbGlzdDo6ZGlzcGxheV9yZWMoYS5nZXRoZWFkKCkpOwogcmV0dXJuIDA7Cn0=