#include<bits/stdc++.h>
using namespace std;
struct Node{
int data;
Node *next;
};
Node *create_node(Node *head, int element){
Node *new_node = new Node;
if(new_node == NULL){
cout<<"overflow"<<endl;
exit(1);
}
new_node->data = element;
new_node->next = head;
return new_node;
}
// insert at end
Node *last_pos(Node *head, int element){
Node *new_node = create_node(NULL, element);
if(head == NULL){
head = new_node;
return new_node;
}
Node *temp = head;
while(temp->next != NULL){
temp = temp->next;
}
temp->next = new_node;
return head;
}
// insert at middle
Node *middle(Node *temp, int element){
Node *new_node = new Node;
if(new_node == NULL){
cout<<"overflow"<<endl;
exit(1);
}
new_node->data = element;
new_node->next = temp->next;
temp->next = new_node;
return temp;
}
// delete head
Node *del_head(Node *head){
if(head == NULL){
cout<<"Underflow"<<endl;
exit(1);
}
head = head->next;
return head;
}
// delete end
Node *del_end(Node *head){
Node *temp=head, *prev;
while(temp->next != NULL){
prev = temp;
temp = temp->next;
}
prev->next = NULL;
return head;
}
//print function
void print(Node *head){
Node *temp = head;
while(temp != NULL){
cout<<temp->data<<" ";
temp = temp->next;
}
}
int main(){
Node *head = NULL;
Node *first, *second, *beg;
first = create_node(head, 10);
head = first;
second = create_node(first->next, 20);
first->next = second;
cout<<"1st & 2nd value: ";
print(head);
cout<<endl;
beg = create_node(head, 5);
head = beg;
cout<<"After insert at first: ";
print(head);
cout<<endl;
cout<<"After insert at last: ";
head = last_pos(head, 30);
print(head);
cout<<endl;
cout<<"after insert at middle: ";
head = middle(head, 15);
print(head);
cout<<endl;
cout<<"After delete head: ";
head = del_head(head);
print(head);
cout<<endl;
cout<<"After delete end: ";
head = del_end(head);
print(head);
cout<<endl;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBOb2RlewogICAgaW50IGRhdGE7CiAgICBOb2RlICpuZXh0Owp9OwoKTm9kZSAqY3JlYXRlX25vZGUoTm9kZSAqaGVhZCwgaW50IGVsZW1lbnQpewogICAgTm9kZSAqbmV3X25vZGUgPSBuZXcgTm9kZTsKCiAgICBpZihuZXdfbm9kZSA9PSBOVUxMKXsKICAgICAgICBjb3V0PDwib3ZlcmZsb3ciPDxlbmRsOwogICAgICAgIGV4aXQoMSk7CiAgICB9CiAgICBuZXdfbm9kZS0+ZGF0YSA9IGVsZW1lbnQ7CiAgICBuZXdfbm9kZS0+bmV4dCA9IGhlYWQ7CgogICAgcmV0dXJuIG5ld19ub2RlOwp9Ci8vIGluc2VydCBhdCBlbmQKCk5vZGUgKmxhc3RfcG9zKE5vZGUgKmhlYWQsIGludCBlbGVtZW50KXsKICAgIE5vZGUgKm5ld19ub2RlID0gY3JlYXRlX25vZGUoTlVMTCwgZWxlbWVudCk7CgogICAgaWYoaGVhZCA9PSBOVUxMKXsKICAgICAgIGhlYWQgPSBuZXdfbm9kZTsKICAgICAgIHJldHVybiBuZXdfbm9kZTsKICAgIH0KCiAgICBOb2RlICp0ZW1wID0gaGVhZDsKICAgIHdoaWxlKHRlbXAtPm5leHQgIT0gTlVMTCl7CiAgICAgICAgdGVtcCA9IHRlbXAtPm5leHQ7CiAgICB9CiAgICB0ZW1wLT5uZXh0ID0gbmV3X25vZGU7CiAgICByZXR1cm4gaGVhZDsKfQoKLy8gaW5zZXJ0IGF0IG1pZGRsZQoKTm9kZSAqbWlkZGxlKE5vZGUgKnRlbXAsIGludCBlbGVtZW50KXsKICAgIE5vZGUgKm5ld19ub2RlID0gbmV3IE5vZGU7CgogICAgaWYobmV3X25vZGUgPT0gTlVMTCl7CiAgICAgICAgY291dDw8Im92ZXJmbG93Ijw8ZW5kbDsKICAgICAgICBleGl0KDEpOwogICAgfQogICAgbmV3X25vZGUtPmRhdGEgPSBlbGVtZW50OwogICAgbmV3X25vZGUtPm5leHQgPSB0ZW1wLT5uZXh0OwogICAgdGVtcC0+bmV4dCA9IG5ld19ub2RlOwoKICAgIHJldHVybiB0ZW1wOwp9CgovLyBkZWxldGUgaGVhZAoKTm9kZSAqZGVsX2hlYWQoTm9kZSAqaGVhZCl7CiAgICBpZihoZWFkID09IE5VTEwpewogICAgICAgIGNvdXQ8PCJVbmRlcmZsb3ciPDxlbmRsOwogICAgICAgIGV4aXQoMSk7CiAgICB9CiAgICBoZWFkID0gaGVhZC0+bmV4dDsKICAgIHJldHVybiBoZWFkOwp9CgovLyBkZWxldGUgZW5kCgpOb2RlICpkZWxfZW5kKE5vZGUgKmhlYWQpewoKICAgIE5vZGUgKnRlbXA9aGVhZCwgKnByZXY7CgogICAgd2hpbGUodGVtcC0+bmV4dCAhPSBOVUxMKXsKICAgICAgICBwcmV2ID0gdGVtcDsKICAgICAgICB0ZW1wID0gdGVtcC0+bmV4dDsKICAgIH0KICAgIHByZXYtPm5leHQgPSBOVUxMOwogICAgcmV0dXJuIGhlYWQ7Cn0KCi8vcHJpbnQgZnVuY3Rpb24KCnZvaWQgcHJpbnQoTm9kZSAqaGVhZCl7CiAgICBOb2RlICp0ZW1wID0gaGVhZDsKICAgIHdoaWxlKHRlbXAgIT0gTlVMTCl7CiAgICAgICAgY291dDw8dGVtcC0+ZGF0YTw8IiAiOwogICAgICAgIHRlbXAgPSB0ZW1wLT5uZXh0OwogICAgfQoKfQoKaW50IG1haW4oKXsKCiAgICBOb2RlICpoZWFkID0gTlVMTDsKICAgIE5vZGUgKmZpcnN0LCAqc2Vjb25kLCAqYmVnOwoKICAgIGZpcnN0ID0gY3JlYXRlX25vZGUoaGVhZCwgMTApOwogICAgaGVhZCA9IGZpcnN0OwoKICAgIHNlY29uZCA9IGNyZWF0ZV9ub2RlKGZpcnN0LT5uZXh0LCAyMCk7CiAgICBmaXJzdC0+bmV4dCA9IHNlY29uZDsKCiAgICBjb3V0PDwiMXN0ICYgMm5kIHZhbHVlOiAiOwogICAgcHJpbnQoaGVhZCk7CiAgICBjb3V0PDxlbmRsOwoKICAgIGJlZyA9IGNyZWF0ZV9ub2RlKGhlYWQsIDUpOwogICAgaGVhZCA9IGJlZzsKCiAgICBjb3V0PDwiQWZ0ZXIgaW5zZXJ0IGF0IGZpcnN0OiAiOwogICAgcHJpbnQoaGVhZCk7CiAgICBjb3V0PDxlbmRsOwoKICAgIGNvdXQ8PCJBZnRlciBpbnNlcnQgYXQgbGFzdDogIjsKICAgIGhlYWQgPSBsYXN0X3BvcyhoZWFkLCAzMCk7CgogICAgcHJpbnQoaGVhZCk7CiAgICBjb3V0PDxlbmRsOwoKICAgIGNvdXQ8PCJhZnRlciBpbnNlcnQgYXQgbWlkZGxlOiAiOwogICAgaGVhZCA9IG1pZGRsZShoZWFkLCAxNSk7CgogICAgcHJpbnQoaGVhZCk7CiAgICBjb3V0PDxlbmRsOwoKICAgIGNvdXQ8PCJBZnRlciBkZWxldGUgaGVhZDogIjsKICAgIGhlYWQgPSBkZWxfaGVhZChoZWFkKTsKCiAgICBwcmludChoZWFkKTsKICAgIGNvdXQ8PGVuZGw7CgogICAgY291dDw8IkFmdGVyIGRlbGV0ZSBlbmQ6ICI7CiAgICBoZWFkID0gZGVsX2VuZChoZWFkKTsKCiAgICBwcmludChoZWFkKTsKICAgIGNvdXQ8PGVuZGw7Cgp9Cg==