//رودينا محمد هاشم محمد
#include<iostream>
using namespace std;
typedef int ElmenetType;
struct node
{
ElmenetType element;
node* next;
node* prev;
};
typedef node* Position;
class List
{
node* head;
node* tail;
int counter;
public:
List()
{
MakeNull();
}
void MakeNull()
{
head = new node;
head->next = NULL;
head->prev = NULL;
tail = NULL;
counter = 0;
}
Position End()
{
node* q = head;
while (q->next != NULL)
q = q->next;
return q;
}
void Insert(ElmenetType x, Position pos)
{
Position t = new node;
t->element = x;
if (pos == NULL)
pos = End();
t->next = pos->next;
t->prev = pos;
if (t->next != NULL)
t->next->prev = t;
pos->next = t;
if (t->next == NULL)
tail = t;
counter++;
}
void Insertback(ElmenetType x)
{
Position p = End();
Insert(x, p);
}
void Delete(Position p)
{
if (p == NULL || p == head)
{
cout << "Invalid position to delete \n";
return;
}
if (p->next == NULL)
tail = p->prev;
p->prev->next = p->next;
if (p->next != NULL)
p->next->prev = p->prev;
delete p;
counter--;
}
void PrintList()
{
cout << "List is : \n";
Position q = head->next;
while (q != NULL)
{
cout << q->element << " ";
q = q->next;
}
cout << endl;
}
Position Locate(ElmenetType x)
{
Position p = head->next;
while (p != NULL)
{
if (p ->element == x)
return p;
p = p->next;
}
return NULL ;
}
ElmenetType Retrieve(Position pos) {
if (pos == NULL|| pos == head) {
cout << "ERROR in reterive";
return -1;
}
return pos->element;
}
Position First()
{
return head;
}
Position Next(Position pos)
{
if (pos == tail)
return NULL;
return pos->next;
}
Position Previous(Position pos)
{
if (pos == head)
return NULL;
return pos->prev;
}
int Size()
{
return counter;
}
friend void Reverse(List& l);
};
void Purge(List& l)
{
Position p = l.First()->next;
while (p != NULL)
{
Position q = p->next;
while (q != NULL)
{
if (p->element == q->element)
l.Delete(q);
else
q = q->next;
}
p = p->next;
}
}
void Reverse(List& l)
{
Position current = l.First();
Position temp = NULL;
while (current != NULL) {
temp = current->next;
current->next = current->prev;
current->prev = temp;
current = temp;
}
}
int main()
{
List l;
l.Insertback(10);
l.Insertback(20);
l.Insertback(30);
l.Insertback(20);
l.Insertback(60);
l.Insertback(2);
l.PrintList();
cout << "Size: " << l.Size() << endl;
Purge(l);
l.PrintList();
Reverse(l);
l.PrintList();
system("pause");
return 0;
}
Ly/YsdmI2K/ZitmG2Kcg2YXYrdmF2K8g2YfYp9i02YUg2YXYrdmF2K8gCiNpbmNsdWRlPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp0eXBlZGVmIGludCBFbG1lbmV0VHlwZTsKc3RydWN0IG5vZGUKewoJRWxtZW5ldFR5cGUgZWxlbWVudDsKCW5vZGUqIG5leHQ7Cglub2RlKiBwcmV2Owp9Owp0eXBlZGVmIG5vZGUqIFBvc2l0aW9uOwoKY2xhc3MgTGlzdAp7Cglub2RlKiBoZWFkOwoJbm9kZSogdGFpbDsKCWludCBjb3VudGVyOwpwdWJsaWM6CglMaXN0KCkKCXsKCQlNYWtlTnVsbCgpOwoJfQoJdm9pZCBNYWtlTnVsbCgpCgl7CgkJaGVhZCA9IG5ldyBub2RlOwoJCWhlYWQtPm5leHQgPSBOVUxMOwoJCWhlYWQtPnByZXYgPSBOVUxMOwoJCXRhaWwgPSBOVUxMOwoJCWNvdW50ZXIgPSAwOwoJfQoJUG9zaXRpb24gRW5kKCkKCXsKCQlub2RlKiBxID0gaGVhZDsKCQl3aGlsZSAocS0+bmV4dCAhPSBOVUxMKQoJCQlxID0gcS0+bmV4dDsKCQlyZXR1cm4gcTsKCX0KCXZvaWQgSW5zZXJ0KEVsbWVuZXRUeXBlIHgsIFBvc2l0aW9uIHBvcykKCXsKCQlQb3NpdGlvbiB0ID0gbmV3IG5vZGU7CgkJdC0+ZWxlbWVudCA9IHg7CgoJCWlmIChwb3MgPT0gTlVMTCkKCQkJcG9zID0gRW5kKCk7CgoJCXQtPm5leHQgPSBwb3MtPm5leHQ7CgkJdC0+cHJldiA9IHBvczsKCgkJaWYgKHQtPm5leHQgIT0gTlVMTCkKCQkJdC0+bmV4dC0+cHJldiA9IHQ7CgoJCXBvcy0+bmV4dCA9IHQ7CgkJCgkJaWYgKHQtPm5leHQgPT0gTlVMTCkKCQkJdGFpbCA9IHQ7CgkJY291bnRlcisrOwoJfQoJdm9pZCBJbnNlcnRiYWNrKEVsbWVuZXRUeXBlIHgpCgl7CgkJUG9zaXRpb24gcCA9IEVuZCgpOwoJCUluc2VydCh4LCBwKTsKCX0KCXZvaWQgRGVsZXRlKFBvc2l0aW9uIHApCgl7CgkJaWYgKHAgPT0gTlVMTCB8fCBwID09IGhlYWQpIAoJCXsKCQkJY291dCA8PCAiSW52YWxpZCBwb3NpdGlvbiB0byBkZWxldGUgXG4iOwoJCQlyZXR1cm47CgkJfQoJCWlmIChwLT5uZXh0ID09IE5VTEwpCgkJCXRhaWwgPSBwLT5wcmV2OwoKCQlwLT5wcmV2LT5uZXh0ID0gcC0+bmV4dDsKCgkJaWYgKHAtPm5leHQgIT0gTlVMTCkKCQkJcC0+bmV4dC0+cHJldiA9IHAtPnByZXY7CgoJCWRlbGV0ZSBwOwoJCWNvdW50ZXItLTsKCX0KCXZvaWQgUHJpbnRMaXN0KCkgCgl7CgkJY291dCA8PCAiTGlzdCBpcyA6IFxuIjsKCQlQb3NpdGlvbiBxID0gaGVhZC0+bmV4dDsKCQl3aGlsZSAocSAhPSBOVUxMKQoJCXsKCQkJY291dCA8PCBxLT5lbGVtZW50IDw8ICIgICI7CgkJCXEgPSBxLT5uZXh0OwoJCX0KCQljb3V0IDw8IGVuZGw7Cgl9CglQb3NpdGlvbiBMb2NhdGUoRWxtZW5ldFR5cGUgeCkKCXsKCQlQb3NpdGlvbiBwID0gaGVhZC0+bmV4dDsKCQl3aGlsZSAocCAhPSBOVUxMKQoJCXsKCQkJaWYgKHAgLT5lbGVtZW50ID09IHgpCgkJCQlyZXR1cm4gcDsKCQkJcCA9IHAtPm5leHQ7CgkJfQoJCXJldHVybiBOVUxMIDsKCX0KCUVsbWVuZXRUeXBlIFJldHJpZXZlKFBvc2l0aW9uIHBvcykgewoJCWlmIChwb3MgPT0gTlVMTHx8IHBvcyA9PSBoZWFkKSB7CgkJCWNvdXQgPDwgIkVSUk9SIGluIHJldGVyaXZlIjsKCQkJcmV0dXJuIC0xOwoJCX0KCQlyZXR1cm4gcG9zLT5lbGVtZW50OwoJfQoJUG9zaXRpb24gRmlyc3QoKQoJewoJCXJldHVybiBoZWFkOwoJfQoJUG9zaXRpb24gTmV4dChQb3NpdGlvbiBwb3MpCgl7CgkJaWYgKHBvcyA9PSB0YWlsKQoJCQlyZXR1cm4gTlVMTDsKCQlyZXR1cm4gcG9zLT5uZXh0OwoJfQoJUG9zaXRpb24gUHJldmlvdXMoUG9zaXRpb24gcG9zKQoJewoJCWlmIChwb3MgPT0gaGVhZCkKCQkJcmV0dXJuIE5VTEw7CgkJcmV0dXJuIHBvcy0+cHJldjsKCX0KCWludCBTaXplKCkKCQl7CgkJCXJldHVybiBjb3VudGVyOwoJCX0KCWZyaWVuZCB2b2lkIFJldmVyc2UoTGlzdCYgbCk7CgoJCn07CnZvaWQgUHVyZ2UoTGlzdCYgbCkKewoJUG9zaXRpb24gcCA9IGwuRmlyc3QoKS0+bmV4dDsKCXdoaWxlIChwICE9IE5VTEwpCgl7CgkJUG9zaXRpb24gcSA9IHAtPm5leHQ7CgkJd2hpbGUgKHEgIT0gTlVMTCkKCQl7CgkJCWlmIChwLT5lbGVtZW50ID09IHEtPmVsZW1lbnQpCgoJCQkJbC5EZWxldGUocSk7CgoJCQllbHNlCgkJCQlxID0gcS0+bmV4dDsKCQl9CgkJcCA9IHAtPm5leHQ7Cgl9Cn0Kdm9pZCBSZXZlcnNlKExpc3QmIGwpCnsKCVBvc2l0aW9uIGN1cnJlbnQgPSBsLkZpcnN0KCk7CglQb3NpdGlvbiB0ZW1wID0gTlVMTDsKCgl3aGlsZSAoY3VycmVudCAhPSBOVUxMKSB7CgkJdGVtcCA9IGN1cnJlbnQtPm5leHQ7CgkJY3VycmVudC0+bmV4dCA9IGN1cnJlbnQtPnByZXY7CgkJY3VycmVudC0+cHJldiA9IHRlbXA7CgkJY3VycmVudCA9IHRlbXA7Cgl9Cn0KCgoKaW50IG1haW4oKQp7CglMaXN0IGw7CglsLkluc2VydGJhY2soMTApOwoJbC5JbnNlcnRiYWNrKDIwKTsKCWwuSW5zZXJ0YmFjaygzMCk7CiAgICBsLkluc2VydGJhY2soMjApOwoJbC5JbnNlcnRiYWNrKDYwKTsKCWwuSW5zZXJ0YmFjaygyKTsKCWwuUHJpbnRMaXN0KCk7IAogICAKCWNvdXQgPDwgIlNpemU6ICIgPDwgbC5TaXplKCkgPDwgZW5kbDsKCVB1cmdlKGwpOwoJbC5QcmludExpc3QoKTsKCVJldmVyc2UobCk7CglsLlByaW50TGlzdCgpOwoKCXN5c3RlbSgicGF1c2UiKTsKCXJldHVybiAwOwp9