#include <iostream>
using namespace std;
struct Node
{
int val ;
Node* next ;
};
class LinkedList
{
Node* head ;
int sz ;
public:
LinkedList()
{
head = NULL ;
sz = 0 ;
}
bool isEmpty()
{
if(head == NULL) return true ;
return false ;
}
void addLast(int value)
{
if(head == NULL)
{
Node* node = new Node() ;
node->val = value ;
node->next = NULL ;
head = node ;
return ;
}
Node* curr = head ;
while(curr->next != NULL)
{
curr = curr->next ;
}
Node* lastNode = new Node() ;
lastNode->val = value ;
curr->next = lastNode ;
lastNode->next = NULL ;
sz++ ;
}
void print()
{
Node* curr = head ;
while(curr != NULL)
{
cout << curr->val << ' ' ;
curr = curr->next ;
}
cout << endl;
}
void addFirst(int value)
{
Node* newnode = new Node() ;
newnode->val = value ;
newnode->next = head ;
head = newnode ;
sz++ ;
}
void addMid(int value, int pos)
{
if(head == NULL)
{
addFirst(value) ;
return ;
}
if(pos == 1 || pos == 0)
{
addFirst(value) ;
return ;
}
if(pos == sz)
{
addLast(value);
return ;
}
sz++ ;
Node* curr = head ;
Node * after = head ;
for(int i = 1 ; i < pos - 1 ; ++i)
{
curr = curr->next ;
after = after->next ;
}
after = curr->next ;
Node* newnode = new Node() ;
newnode->val = value ;
newnode->next = after ;
curr->next = newnode ;
}
int getSz()
{
return this->sz;
}
void dLast()
{
Node* curr = head ;
Node* after = head ;
after = after->next ;
while(after->next != NULL)
{
curr = curr->next ;
after = after->next ;
}
delete after ;
curr->next = NULL ;
sz-- ;
}
void dFirst()
{
if(head == NULL)
{
cout << "The list is empty" << endl;
return ;
}
Node* curr = head;
curr = curr->next ;
delete head ;
head = curr ;
sz-- ;
}
void dMid(int pos)
{
if(pos == 1)
{
dFirst() ;
return ;
}
if(head == NULL)
{
cout << "The list is empty" << endl;
return ;
}
if(pos == sz)
{
dLast() ;
return ;
}
Node* curr = head ;
Node* mid = head ;
Node* after = head ;
mid = mid->next ;
after = after->next->next ;
for(int i = 1 ; i < pos - 1 ; ++i){
curr = curr->next ;
mid = mid->next ;
after = after->next ;
}
delete mid ;
curr->next = after ;
sz-- ;
}
};
int main() // 1 50 70 5 10
{
LinkedList l ;
l.addFirst(70) ;
l.addLast(5) ;
l.print() ;
l.addLast(10) ;
l.addFirst(50) ;
l.addFirst(1) ;
l.print() ;
l.addMid(200,3);
l.addMid(200,1);
cout << l.getSz() << endl;
l.print() ;
l.dFirst() ;
l.print() ;
l.dLast() ;
l.print() ;
l.dMid(3) ;
l.print() ;
l.dMid(1) ;
l.print() ;
cout << l.getSz() << endl;
l.dMid(3) ;
l.print() ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBOb2RlCnsKICAgIGludCB2YWwgOwogICAgTm9kZSogbmV4dCA7Cn07CgpjbGFzcyBMaW5rZWRMaXN0CnsKICAgIE5vZGUqIGhlYWQgOwogICAgaW50IHN6IDsKCnB1YmxpYzoKICAgIExpbmtlZExpc3QoKQogICAgewogICAgICAgIGhlYWQgPSBOVUxMIDsKICAgICAgICBzeiA9IDAgOwogICAgfQoKICAgIGJvb2wgaXNFbXB0eSgpCiAgICB7CiAgICAgICAgaWYoaGVhZCA9PSBOVUxMKSByZXR1cm4gdHJ1ZSA7CiAgICAgICAgcmV0dXJuIGZhbHNlIDsKICAgIH0KCiAgICB2b2lkIGFkZExhc3QoaW50IHZhbHVlKQogICAgewogICAgICAgIGlmKGhlYWQgPT0gTlVMTCkKICAgICAgICB7CiAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBuZXcgTm9kZSgpICA7CiAgICAgICAgICAgIG5vZGUtPnZhbCA9IHZhbHVlIDsKICAgICAgICAgICAgbm9kZS0+bmV4dCA9IE5VTEwgOwogICAgICAgICAgICBoZWFkID0gbm9kZSA7CiAgICAgICAgICAgIHJldHVybiA7CiAgICAgICAgfQogICAgICAgIE5vZGUqIGN1cnIgPSBoZWFkIDsKICAgICAgICB3aGlsZShjdXJyLT5uZXh0ICE9IE5VTEwpCiAgICAgICAgewogICAgICAgICAgICBjdXJyID0gY3Vyci0+bmV4dCA7CiAgICAgICAgfQogICAgICAgIE5vZGUqIGxhc3ROb2RlID0gbmV3IE5vZGUoKSA7CiAgICAgICAgbGFzdE5vZGUtPnZhbCA9IHZhbHVlIDsKICAgICAgICBjdXJyLT5uZXh0ID0gbGFzdE5vZGUgOwogICAgICAgIGxhc3ROb2RlLT5uZXh0ID0gTlVMTCA7CiAgICAgICAgc3orKyA7CiAgICB9CiAgICB2b2lkIHByaW50KCkKICAgIHsKICAgICAgICBOb2RlKiBjdXJyID0gaGVhZCA7CiAgICAgICAgd2hpbGUoY3VyciAhPSBOVUxMKQogICAgICAgIHsKICAgICAgICAgICAgY291dCA8PCBjdXJyLT52YWwgPDwgJyAnIDsKICAgICAgICAgICAgY3VyciA9IGN1cnItPm5leHQgOwogICAgICAgIH0KICAgICAgICBjb3V0IDw8IGVuZGw7CiAgICB9CgogICAgdm9pZCBhZGRGaXJzdChpbnQgdmFsdWUpCiAgICB7CgogICAgICAgIE5vZGUqIG5ld25vZGUgPSBuZXcgTm9kZSgpIDsKICAgICAgICBuZXdub2RlLT52YWwgPSB2YWx1ZSA7CiAgICAgICAgbmV3bm9kZS0+bmV4dCA9IGhlYWQgOwogICAgICAgIGhlYWQgPSBuZXdub2RlIDsKICAgICAgICBzeisrIDsKICAgIH0KCiAgICB2b2lkIGFkZE1pZChpbnQgdmFsdWUsIGludCBwb3MpCiAgICB7CiAgICAgICAgaWYoaGVhZCA9PSBOVUxMKQogICAgICAgIHsKICAgICAgICAgICAgYWRkRmlyc3QodmFsdWUpIDsKICAgICAgICAgICAgcmV0dXJuIDsKICAgICAgICB9CiAgICAgICAgaWYocG9zID09IDEgfHwgcG9zID09IDApCiAgICAgICAgewogICAgICAgICAgICBhZGRGaXJzdCh2YWx1ZSkgOwogICAgICAgICAgICByZXR1cm4gOwogICAgICAgIH0KICAgICAgICBpZihwb3MgPT0gc3opCiAgICAgICAgewogICAgICAgICAgICBhZGRMYXN0KHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIDsKICAgICAgICB9CiAgICAgICAgc3orKyA7CiAgICAgICAgTm9kZSogY3VyciA9IGhlYWQgOwogICAgICAgIE5vZGUgKiBhZnRlciA9IGhlYWQgOwogICAgICAgIGZvcihpbnQgaSA9IDEgOyBpIDwgcG9zIC0gMSA7ICsraSkKICAgICAgICB7CiAgICAgICAgICAgIGN1cnIgPSBjdXJyLT5uZXh0IDsKICAgICAgICAgICAgYWZ0ZXIgPSBhZnRlci0+bmV4dCA7CiAgICAgICAgfQogICAgICAgIGFmdGVyID0gY3Vyci0+bmV4dCA7CiAgICAgICAgTm9kZSogbmV3bm9kZSA9IG5ldyBOb2RlKCkgOwogICAgICAgIG5ld25vZGUtPnZhbCA9IHZhbHVlIDsKICAgICAgICBuZXdub2RlLT5uZXh0ID0gYWZ0ZXIgOwogICAgICAgIGN1cnItPm5leHQgPSBuZXdub2RlIDsKICAgIH0KCiAgICBpbnQgZ2V0U3ooKQogICAgewogICAgICAgIHJldHVybiB0aGlzLT5zejsKICAgIH0KCiAgICB2b2lkIGRMYXN0KCkKICAgIHsKCiAgICAgICAgTm9kZSogY3VyciA9IGhlYWQgOwogICAgICAgIE5vZGUqIGFmdGVyID0gaGVhZCA7CiAgICAgICAgYWZ0ZXIgPSBhZnRlci0+bmV4dCA7CiAgICAgICAgd2hpbGUoYWZ0ZXItPm5leHQgIT0gTlVMTCkKICAgICAgICB7CiAgICAgICAgICAgIGN1cnIgPSBjdXJyLT5uZXh0IDsKICAgICAgICAgICAgYWZ0ZXIgPSBhZnRlci0+bmV4dCA7CiAgICAgICAgfQogICAgICAgIGRlbGV0ZSBhZnRlciA7CiAgICAgICAgY3Vyci0+bmV4dCA9IE5VTEwgOwogICAgICAgIHN6LS0gOwogICAgfQoKICAgIHZvaWQgZEZpcnN0KCkKICAgIHsKICAgICAgICBpZihoZWFkID09IE5VTEwpCiAgICAgICAgewogICAgICAgICAgICBjb3V0IDw8ICJUaGUgbGlzdCBpcyBlbXB0eSIgPDwgZW5kbDsKICAgICAgICAgICAgcmV0dXJuIDsKICAgICAgICB9CiAgICAgICAgTm9kZSogY3VyciA9IGhlYWQ7CiAgICAgICAgY3VyciA9IGN1cnItPm5leHQgOwogICAgICAgIGRlbGV0ZSBoZWFkIDsKICAgICAgICBoZWFkID0gY3VyciA7CiAgICAgICAgc3otLSA7CiAgICB9CgogICAgdm9pZCBkTWlkKGludCBwb3MpCiAgICB7CiAgICAgICAgaWYocG9zID09IDEpCiAgICAgICAgewogICAgICAgICAgICBkRmlyc3QoKSA7CiAgICAgICAgICAgIHJldHVybiA7CiAgICAgICAgfQogICAgICAgIGlmKGhlYWQgPT0gTlVMTCkKICAgICAgICB7CiAgICAgICAgICAgIGNvdXQgPDwgIlRoZSBsaXN0IGlzIGVtcHR5IiA8PCBlbmRsOwogICAgICAgICAgICByZXR1cm4gOwogICAgICAgIH0KICAgICAgICBpZihwb3MgPT0gc3opCiAgICAgICAgewogICAgICAgICAgICBkTGFzdCgpIDsKICAgICAgICAgICAgcmV0dXJuIDsKICAgICAgICB9CiAgICAgICAgTm9kZSogY3VyciA9IGhlYWQgOwogICAgICAgIE5vZGUqIG1pZCA9IGhlYWQgOwogICAgICAgIE5vZGUqIGFmdGVyID0gaGVhZCA7CiAgICAgICAgbWlkID0gbWlkLT5uZXh0IDsKICAgICAgICBhZnRlciA9IGFmdGVyLT5uZXh0LT5uZXh0IDsKCiAgICAgICAgZm9yKGludCBpID0gMSA7IGkgPCBwb3MgLSAxIDsgKytpKXsKICAgICAgICAgICAgY3VyciA9IGN1cnItPm5leHQgOwogICAgICAgICAgICBtaWQgPSBtaWQtPm5leHQgOwogICAgICAgICAgICBhZnRlciA9IGFmdGVyLT5uZXh0IDsKICAgICAgICB9CiAgICAgICAgZGVsZXRlIG1pZCA7CiAgICAgICAgY3Vyci0+bmV4dCA9IGFmdGVyIDsKICAgICAgICBzei0tIDsKICAgIH0KfTsKCmludCBtYWluKCkgLy8gIDEgNTAgNzAgNSAxMAp7CiAgICBMaW5rZWRMaXN0IGwgOwogICAgbC5hZGRGaXJzdCg3MCkgOwogICAgbC5hZGRMYXN0KDUpIDsKICAgIGwucHJpbnQoKSA7CiAgICBsLmFkZExhc3QoMTApIDsKCiAgICBsLmFkZEZpcnN0KDUwKSA7CiAgICBsLmFkZEZpcnN0KDEpIDsKICAgIGwucHJpbnQoKSA7CgoKICAgIGwuYWRkTWlkKDIwMCwzKTsKICAgIGwuYWRkTWlkKDIwMCwxKTsKICAgIGNvdXQgPDwgbC5nZXRTeigpIDw8IGVuZGw7CgogICAgbC5wcmludCgpIDsKCiAgICBsLmRGaXJzdCgpIDsKICAgIGwucHJpbnQoKSA7CgogICAgbC5kTGFzdCgpIDsKICAgIGwucHJpbnQoKSA7CgogICAgbC5kTWlkKDMpIDsKICAgIGwucHJpbnQoKSA7CgogICAgbC5kTWlkKDEpIDsKICAgIGwucHJpbnQoKSA7CgogICAgY291dCA8PCBsLmdldFN6KCkgPDwgZW5kbDsKCiAgICBsLmRNaWQoMykgOwogICAgbC5wcmludCgpIDsKCgp9Cg==