Qestion: Please add pre-condition, post-conditions and descriptions for each member function of the LINKED_LIST_CLASS. Answer with your new version of the program. #include using namespace std; class LIST_NODE { public: int data; // data element of node LIST_NODE *next; // pointer element of node }; class LINKED_LIST_CLASS { public: LINKED_LIST_CLASS(); // default constructor LINKED_LIST_CLASS(LINKED_LIST_CLASS &); // copy constructor ~LINKED_LIST_CLASS(); // destructor void Add(int); // mutator void Print(); // accessor LIST_NODE * Search(int); // accessor void Remove(int); // mutator bool Is_Empty(); // accessor private: LIST_NODE *front; // pointer to front of list }; LINKED_LIST_CLASS::LINKED_LIST_CLASS() { cout << endl << \"The default constructor has been called.\ \"; front = new LIST_NODE; front->next = 0; // initialize the next field to null front->data = -10000; } LINKED_LIST_CLASS::LINKED_LIST_CLASS(LINKED_LIST_CLASS & org) { cout << endl << \"The copy constructor has been called.\ \"; front = new LIST_NODE; front->next = 0; front->data = -10000; LIST_NODE *p = org.front->next; LIST_NODE *back = 0; while(p!=0) { if (back == 0) { front->next = new LIST_NODE; back = front->next; back->next = 0; back->data = p->data; } else { back->next = new LIST_NODE; back = back->next; back->data = p->data; back->next = 0; } p=p->next; } } LINKED_LIST_CLASS::~LINKED_LIST_CLASS() { cout << endl << \"The destructor has been called.\ \"; while (front->next != 0) { LIST_NODE *p = front->next; front->next = front->next->next; delete p; } delete front; front = 0; } void LINKED_LIST_CLASS::Add(int item) { LIST_NODE *p = new LIST_NODE; p->data = item; if (front->next== 0) // empty list { front->next = p; p->next = 0; } else // list has information and is not empty { p->next = front->next; front->next = p; } } void LINKED_LIST_CLASS::Print() { cout << endl; for(LIST_NODE *p = front->next; p != 0; p = p->next) { cout << p->data; if (p->next != 0) { cout << \"-->\"; } } cout<next; p!=0; p=p->next) { if (p->data == key) return p; } return 0; // key not found in list } void LINKED_LIST_CLASS::Remove(int key) { LIST_NODE *p = Search(key); if (Is_Empty()) { cout << key << \" is not in the list. No removal performed!\ \"; } else { LIST_NODE *q = front; while (q->next->data != key) { q = q->next; } q->next = p->next; // CRITICAL STEP!!!! delete p; } } bool LINKED_LIST_CLASS::Is_Empty() { return front->next == 0; } int main() { LINKED_LIST_CLASS L1; L1.Add(5); L1.Add(10); L1.Add(29); L1.Print(); LINKED_LIST_CLASS L2 = L1; L2.Print(); L1.Remove(10); L1.Print(); return 0; } Solution #include using namespace std; class LIST_NODE { public: int data; // data element of node LIST_NODE *next; // pointer element of node }; class LINKED_LIST_CLASS { public: LINKED_LIST_CLASS(); // default constructor LINKED_LIST_CLASS(LINKED_LIST_CLASS &); // copy constructor ~LINKED_LIST_CLASS(); // destructor void Add(int); // mutator void Print(); // accessor LIST_NODE * Search(int); // ac.