#include<bits/stdc++.h>
using namespace std;
class linklist
{
struct Node
{
int data;
Node*next;
Node(int data,Node*ptr)
{
this->data=data;
next=ptr;
}
Node(int data)
{
this->data=data;
next=0;
}
};
Node*head=nullptr;
Node*tail=nullptr;
void insertfirst(int val)
{
Node*nn=new Node(val,head);
head=nn;
if(tail==0)tail=nn;
}
void insertlast(int val)
{
if(head==0)
{
insertfirst(val);
}
Node*nn=new Node(val);
tail->next=nn;
tail=nn;
}
int size=0;
public:
void insert(int val,int pos)
{
size++;
if(pos==1){
insertfirst(val);
return;}
else if(pos==size)
{
insertlast(val);
return;
}
Node*prev=head;
for(int i=0;i<pos-2;i++)
{
prev=prev->next;
}
Node*nn=new Node(val,prev->next);
prev->next=nn;
}
void delvalue(int pos)
{
if(pos < 1 || pos > size)
{
cout << "Invalid position!" << endl;
return;
}
if(pos == 1)
{
Node* temp = head;
head = head->next;
if(head == nullptr)
tail = nullptr;
delete temp;
}
else
{
Node* prev = head;
for(int i = 1; i < pos - 1; i++)
{
prev = prev->next;
}
Node* temp = prev->next;
prev->next = temp->next;
if(temp == tail)
tail = prev;
delete temp;
}
size--;
}
void display()
{
Node*ptr=head;
while(ptr!=0)
{
cout<<ptr->data<<" ";
ptr=ptr->next;
}
cout<<endl;
}
};
int main()
{
linklist l1,l2;
l1.insert(100,1);
l1.insert(200,1);
l1.insert(300,2);
l1.display();
l1.delvalue(2);
l1.display();
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIGxpbmtsaXN0CnsKICAgIHN0cnVjdCBOb2RlCiAgICB7CiAgICAgICAgaW50IGRhdGE7CiAgICAgICAgTm9kZSpuZXh0OwoKICAgIE5vZGUoaW50IGRhdGEsTm9kZSpwdHIpCiAgICB7CiAgICAgICAgdGhpcy0+ZGF0YT1kYXRhOwogICAgICAgIG5leHQ9cHRyOwogICAgfQogICAgTm9kZShpbnQgZGF0YSkKICAgIHsKICAgICAgICB0aGlzLT5kYXRhPWRhdGE7CiAgICAgICAgbmV4dD0wOwogICAgfQogICAgfTsKICAgIE5vZGUqaGVhZD1udWxscHRyOwogICAgTm9kZSp0YWlsPW51bGxwdHI7CnZvaWQgaW5zZXJ0Zmlyc3QoaW50IHZhbCkKewpOb2RlKm5uPW5ldyBOb2RlKHZhbCxoZWFkKTsKaGVhZD1ubjsKaWYodGFpbD09MCl0YWlsPW5uOwp9CnZvaWQgaW5zZXJ0bGFzdChpbnQgdmFsKQp7CiAgICBpZihoZWFkPT0wKQogICAgewogICAgICAgIGluc2VydGZpcnN0KHZhbCk7CiAgICB9Ck5vZGUqbm49bmV3IE5vZGUodmFsKTsKdGFpbC0+bmV4dD1ubjsKdGFpbD1ubjsKfQppbnQgc2l6ZT0wOwpwdWJsaWM6CnZvaWQgaW5zZXJ0KGludCB2YWwsaW50IHBvcykKewogICAgc2l6ZSsrOwogICAgaWYocG9zPT0xKXsKICAgIGluc2VydGZpcnN0KHZhbCk7CiAgICByZXR1cm47fQogICAgZWxzZSBpZihwb3M9PXNpemUpCiAgICB7CiAgICAgICAgaW5zZXJ0bGFzdCh2YWwpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIE5vZGUqcHJldj1oZWFkOwogICAgZm9yKGludCBpPTA7aTxwb3MtMjtpKyspCiAgICB7CiAgICAgICAgcHJldj1wcmV2LT5uZXh0OwogICAgfQogICAgTm9kZSpubj1uZXcgTm9kZSh2YWwscHJldi0+bmV4dCk7CiAgICBwcmV2LT5uZXh0PW5uOwp9CnZvaWQgZGVsdmFsdWUoaW50IHBvcykKewogICAgaWYocG9zIDwgMSB8fCBwb3MgPiBzaXplKQogICAgewogICAgICAgIGNvdXQgPDwgIkludmFsaWQgcG9zaXRpb24hIiA8PCBlbmRsOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIAogICAgaWYocG9zID09IDEpIAogICAgewogICAgICAgIE5vZGUqIHRlbXAgPSBoZWFkOyAgICAgIAogICAgICAgIGhlYWQgPSBoZWFkLT5uZXh0OyAgICAgCiAgICAgICAgaWYoaGVhZCA9PSBudWxscHRyKSAKICAgICAgICAgICAgdGFpbCA9IG51bGxwdHI7ICAgICAKICAgICAgICBkZWxldGUgdGVtcDsgICAgICAgICAgIAogICAgfQogICAgZWxzZSAKICAgIHsKICAgICAgICBOb2RlKiBwcmV2ID0gaGVhZDsKICAgICAgIAogICAgICAgIGZvcihpbnQgaSA9IDE7IGkgPCBwb3MgLSAxOyBpKyspCiAgICAgICAgewogICAgICAgICAgICBwcmV2ID0gcHJldi0+bmV4dDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgTm9kZSogdGVtcCA9IHByZXYtPm5leHQ7ICAgIAogICAgICAgIHByZXYtPm5leHQgPSB0ZW1wLT5uZXh0OyAgICAKICAgICAgICAKICAgICAgICBpZih0ZW1wID09IHRhaWwpICAgICAgICAgICAKICAgICAgICAgICAgdGFpbCA9IHByZXY7ICAgICAgICAgICAKICAgICAgICAKICAgICAgICBkZWxldGUgdGVtcDsgICAgICAgICAgICAgICAKICAgIH0KICAgIHNpemUtLTsKfQp2b2lkIGRpc3BsYXkoKQp7CiAgICBOb2RlKnB0cj1oZWFkOwogICAgd2hpbGUocHRyIT0wKQogICAgewogICAgICAgIGNvdXQ8PHB0ci0+ZGF0YTw8IiAiOwogICAgICAgIHB0cj1wdHItPm5leHQ7CiAgICB9CiAgICBjb3V0PDxlbmRsOwp9Cn07CgppbnQgbWFpbigpCnsKbGlua2xpc3QgbDEsbDI7CmwxLmluc2VydCgxMDAsMSk7CmwxLmluc2VydCgyMDAsMSk7CmwxLmluc2VydCgzMDAsMik7CmwxLmRpc3BsYXkoKTsKbDEuZGVsdmFsdWUoMik7CmwxLmRpc3BsYXkoKTsKICAgIHJldHVybiAwOwoKfQ==