#include <bits/stdc++.h>
using namespace std;
struct Node {
int val;
Node* next;
};
Node* InsertAtBegin(Node* root, int x) {
Node* newnode = new Node();
newnode->val = x;
newnode->next = NULL;
if(root==NULL)
{
root=newnode;
return root;
}
else
{
newnode->next=root;
root=newnode;
return root;
}
}
Node*InsertAtEnd(Node*root,int x)
{
Node*newnode=new Node();
newnode->next=NULL;
newnode->val=x;
if(root==NULL)
{
root=newnode;
return root;
}
Node*currnode;
currnode=root;
while(currnode->next!=NULL)
{
currnode=currnode->next;
}
currnode->next=newnode;
return root;
}
Node*InsertAtPos(Node*root,int x,int pos)
{
if(pos==0)
{
root=InsertAtBegin(root,x);
}
else
{
Node*newnode=new Node();
newnode->val=x;
newnode->next=NULL;
Node*currnode;
currnode=root;
for(int i=1;i<pos && currnode!=NULL;i++)
{
currnode=currnode->next;
}
newnode->next=currnode->next;
currnode->next=newnode;
}
return root;
}
Node*SortedInsert(Node*root,int x)
{
Node*newnode=new Node();
newnode->val=x;
newnode->next=NULL;
Node*currnode,*prevnode;
currnode=root;
prevnode=NULL;
if(root==NULL)
{
root=newnode;
return root;
}
if(x<root->val)
{
newnode->next=root;
root=newnode;
return root;
}
while(currnode!=NULL)
{
if(currnode->val<x)
{
prevnode=currnode;
currnode=currnode->next;
}
else
{
prevnode->next=newnode;
newnode->next=currnode;
return root;
}
prevnode->next=newnode;
newnode->next=NULL;
}
return root;
}
int Search(Node*root,int x)
{
int pos=0;
Node*currnode;
currnode=root;
while(currnode!=NULL)
{
if(currnode->val==x)
{
return pos;
}
else
{
currnode=currnode->next;
pos++;
}
}
return -1;
}
Node*DeleteFromBegin(Node*root)
{
if(root==NULL)
return NULL;
Node*temp;
temp=root;
root=root->next;
delete temp;
return root;
}
Node*DeleteFromPos(Node*root,int pos)
{
if(root==NULL || pos<0)
return root;
if(pos==0)
{
return DeleteFromBegin(root);
}
Node*currnode=root;
Node*prevnode=NULL;
int count=0;
while(currnode!=NULL && count<pos)
{
prevnode=currnode;
currnode=currnode->next;
count++;
}
if(currnode!=NULL)
{
prevnode->next=currnode->next;
delete currnode;
}
return root;
}
Node*DeleteDromEnd(Node*root)
{
if(root==NULL)
return NULL;
if(root->next==NULL)
{
delete root;
return NULL;
}
Node*currnode=root;
while(currnode->next && currnode->next->next)
{
currnode=currnode->next;
}
Node*temp=currnode->next;
currnode->next=NULL;
delete temp;
return root;
}
void Print(Node* root) {
Node* currnode = root;
while (currnode != NULL) {
cout << currnode->val << " ";
currnode = currnode->next;
}
cout << endl;
}
int main() {
Node* root = NULL;
int n;
cin >> n;
if(n<=0)
{
cout<<endl;
return 0;
}
int a[n];
for (int i = 0; i < n; i++) {
cin >> a[i];
}
Print(root);
for (int i = 0; i < n; i++) {
root = InsertAtBegin(root, a[i]);
}
Print(root);
for(int i=0;i<n;i++)
{
root=InsertAtEnd(root,a[i]);
}
Print(root);
root=InsertAtPos(root,5,0);
root=InsertAtPos(root,8,3);
Print(root);
for(int i=0;i<n;i++)
{
root=SortedInsert(root,a[i]);
}
Print(root);
for(int i=0;i<n;i++)
{
cout<<"Positions of "<<a[i]<<":"<<Search(root,a[i])<<endl;
}
for(int i=0;i<n;i++)
{
root=DeleteFromBegin(root);
}
Print(root);
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJ1Y3QgTm9kZSB7CiAgICBpbnQgdmFsOwogICAgTm9kZSogbmV4dDsKfTsKCgpOb2RlKiBJbnNlcnRBdEJlZ2luKE5vZGUqIHJvb3QsIGludCB4KSB7CiAgICBOb2RlKiBuZXdub2RlID0gbmV3IE5vZGUoKTsKICAgIG5ld25vZGUtPnZhbCA9IHg7CiAgICBuZXdub2RlLT5uZXh0ID0gTlVMTDsKaWYocm9vdD09TlVMTCkKewpyb290PW5ld25vZGU7CiAgICByZXR1cm4gcm9vdDsKfQplbHNlCnsKbmV3bm9kZS0+bmV4dD1yb290Owpyb290PW5ld25vZGU7CnJldHVybiByb290Owp9Cn0KTm9kZSpJbnNlcnRBdEVuZChOb2RlKnJvb3QsaW50IHgpCnsKTm9kZSpuZXdub2RlPW5ldyBOb2RlKCk7Cm5ld25vZGUtPm5leHQ9TlVMTDsKbmV3bm9kZS0+dmFsPXg7CmlmKHJvb3Q9PU5VTEwpCnsKcm9vdD1uZXdub2RlOwpyZXR1cm4gcm9vdDsKfQpOb2RlKmN1cnJub2RlOwpjdXJybm9kZT1yb290Owp3aGlsZShjdXJybm9kZS0+bmV4dCE9TlVMTCkKewpjdXJybm9kZT1jdXJybm9kZS0+bmV4dDsKfQpjdXJybm9kZS0+bmV4dD1uZXdub2RlOwpyZXR1cm4gcm9vdDsKfQpOb2RlKkluc2VydEF0UG9zKE5vZGUqcm9vdCxpbnQgeCxpbnQgcG9zKQp7CmlmKHBvcz09MCkKewpyb290PUluc2VydEF0QmVnaW4ocm9vdCx4KTsKfQplbHNlCnsKTm9kZSpuZXdub2RlPW5ldyBOb2RlKCk7Cm5ld25vZGUtPnZhbD14OwpuZXdub2RlLT5uZXh0PU5VTEw7Ck5vZGUqY3Vycm5vZGU7CmN1cnJub2RlPXJvb3Q7CmZvcihpbnQgaT0xO2k8cG9zICYmIGN1cnJub2RlIT1OVUxMO2krKykKewpjdXJybm9kZT1jdXJybm9kZS0+bmV4dDsKfQpuZXdub2RlLT5uZXh0PWN1cnJub2RlLT5uZXh0OwpjdXJybm9kZS0+bmV4dD1uZXdub2RlOwp9CnJldHVybiByb290Owp9Ck5vZGUqU29ydGVkSW5zZXJ0KE5vZGUqcm9vdCxpbnQgeCkKewpOb2RlKm5ld25vZGU9bmV3IE5vZGUoKTsKbmV3bm9kZS0+dmFsPXg7Cm5ld25vZGUtPm5leHQ9TlVMTDsKTm9kZSpjdXJybm9kZSwqcHJldm5vZGU7CmN1cnJub2RlPXJvb3Q7CnByZXZub2RlPU5VTEw7CmlmKHJvb3Q9PU5VTEwpCnsKcm9vdD1uZXdub2RlOwpyZXR1cm4gcm9vdDsKfQppZih4PHJvb3QtPnZhbCkKewpuZXdub2RlLT5uZXh0PXJvb3Q7CnJvb3Q9bmV3bm9kZTsKcmV0dXJuIHJvb3Q7Cn0KCndoaWxlKGN1cnJub2RlIT1OVUxMKQp7CmlmKGN1cnJub2RlLT52YWw8eCkKewpwcmV2bm9kZT1jdXJybm9kZTsKY3Vycm5vZGU9Y3Vycm5vZGUtPm5leHQ7Cn0KZWxzZQp7CnByZXZub2RlLT5uZXh0PW5ld25vZGU7Cm5ld25vZGUtPm5leHQ9Y3Vycm5vZGU7CnJldHVybiByb290Owp9CnByZXZub2RlLT5uZXh0PW5ld25vZGU7Cm5ld25vZGUtPm5leHQ9TlVMTDsKfQpyZXR1cm4gcm9vdDsKfQppbnQgU2VhcmNoKE5vZGUqcm9vdCxpbnQgeCkKewppbnQgcG9zPTA7Ck5vZGUqY3Vycm5vZGU7CmN1cnJub2RlPXJvb3Q7CndoaWxlKGN1cnJub2RlIT1OVUxMKQp7CmlmKGN1cnJub2RlLT52YWw9PXgpCnsKcmV0dXJuIHBvczsKfQplbHNlCnsKY3Vycm5vZGU9Y3Vycm5vZGUtPm5leHQ7CnBvcysrOwp9Cn0KcmV0dXJuIC0xOwp9Ck5vZGUqRGVsZXRlRnJvbUJlZ2luKE5vZGUqcm9vdCkKewppZihyb290PT1OVUxMKQpyZXR1cm4gTlVMTDsKCk5vZGUqdGVtcDsKdGVtcD1yb290Owpyb290PXJvb3QtPm5leHQ7CmRlbGV0ZSB0ZW1wOwpyZXR1cm4gcm9vdDsKfQpOb2RlKkRlbGV0ZUZyb21Qb3MoTm9kZSpyb290LGludCBwb3MpCnsKaWYocm9vdD09TlVMTCB8fCBwb3M8MCkKcmV0dXJuIHJvb3Q7CmlmKHBvcz09MCkKewpyZXR1cm4gRGVsZXRlRnJvbUJlZ2luKHJvb3QpOwp9Ck5vZGUqY3Vycm5vZGU9cm9vdDsKTm9kZSpwcmV2bm9kZT1OVUxMOwppbnQgY291bnQ9MDsKd2hpbGUoY3Vycm5vZGUhPU5VTEwgJiYgY291bnQ8cG9zKQp7CnByZXZub2RlPWN1cnJub2RlOwpjdXJybm9kZT1jdXJybm9kZS0+bmV4dDsKY291bnQrKzsKfQppZihjdXJybm9kZSE9TlVMTCkKewpwcmV2bm9kZS0+bmV4dD1jdXJybm9kZS0+bmV4dDsKZGVsZXRlIGN1cnJub2RlOwp9CnJldHVybiByb290Owp9Ck5vZGUqRGVsZXRlRHJvbUVuZChOb2RlKnJvb3QpCnsKaWYocm9vdD09TlVMTCkKcmV0dXJuIE5VTEw7CmlmKHJvb3QtPm5leHQ9PU5VTEwpCnsKZGVsZXRlIHJvb3Q7CnJldHVybiBOVUxMOwp9Ck5vZGUqY3Vycm5vZGU9cm9vdDsKd2hpbGUoY3Vycm5vZGUtPm5leHQgJiYgY3Vycm5vZGUtPm5leHQtPm5leHQpCnsKY3Vycm5vZGU9Y3Vycm5vZGUtPm5leHQ7Cn0KTm9kZSp0ZW1wPWN1cnJub2RlLT5uZXh0OwpjdXJybm9kZS0+bmV4dD1OVUxMOwpkZWxldGUgdGVtcDsKcmV0dXJuIHJvb3Q7Cn0KCnZvaWQgUHJpbnQoTm9kZSogcm9vdCkgewogICAgTm9kZSogY3Vycm5vZGUgPSByb290OwogICAgd2hpbGUgKGN1cnJub2RlICE9IE5VTEwpIHsKICAgICAgICBjb3V0IDw8IGN1cnJub2RlLT52YWwgPDwgIiAiOwogICAgICAgIGN1cnJub2RlID0gY3Vycm5vZGUtPm5leHQ7CiAgICB9CiAgICBjb3V0IDw8IGVuZGw7Cn0KCmludCBtYWluKCkgewogICAgTm9kZSogcm9vdCA9IE5VTEw7CiAgICBpbnQgbjsKICAgIGNpbiA+PiBuOyAKaWYobjw9MCkKewpjb3V0PDxlbmRsOwpyZXR1cm4gMDsKfQogICAgaW50IGFbbl07CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgIGNpbiA+PiBhW2ldOyAKICAgIH0KCiAgICBQcmludChyb290KTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgcm9vdCA9IEluc2VydEF0QmVnaW4ocm9vdCwgYVtpXSk7CiAgICB9CgogICAgCiAgICBQcmludChyb290KTsKZm9yKGludCBpPTA7aTxuO2krKykKewpyb290PUluc2VydEF0RW5kKHJvb3QsYVtpXSk7Cn0KUHJpbnQocm9vdCk7Cgpyb290PUluc2VydEF0UG9zKHJvb3QsNSwwKTsKcm9vdD1JbnNlcnRBdFBvcyhyb290LDgsMyk7CgpQcmludChyb290KTsKZm9yKGludCBpPTA7aTxuO2krKykKewpyb290PVNvcnRlZEluc2VydChyb290LGFbaV0pOwp9ClByaW50KHJvb3QpOwpmb3IoaW50IGk9MDtpPG47aSsrKQp7CmNvdXQ8PCJQb3NpdGlvbnMgb2YgIjw8YVtpXTw8IjoiPDxTZWFyY2gocm9vdCxhW2ldKTw8ZW5kbDsKfQpmb3IoaW50IGk9MDtpPG47aSsrKQp7CnJvb3Q9RGVsZXRlRnJvbUJlZ2luKHJvb3QpOwp9ClByaW50KHJvb3QpOwogICAgcmV0dXJuIDA7Cn0=