Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

#include using namespace std; class LIST_NODE { public: int data; // data elemen

ID: 3559676 • Letter: #

Question

#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; } Question 12: What is the output of the program in Step 3? Question 13: Referring to the program in Step 3, please explain the order in which nodes are removed from a list. Question 14: Is the Search() function called by any member functions of the linked list class for the program in Step 3? Question 15: Please add a statement to the program in Step 3 that tests the Search() function. What did you add? Question 16: 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.

Explanation / Answer

LINKED_LIST_CLASS::LINKED_LIST_CLASS()

{

cout<<endl<<"Default constructor has been called ";

front = new LIST_NODE;

front->next = 0; //initialize next field to null

front->data = -10000;

}

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 != NULL; p = p->next)

{

cout<<p->data;

if (p->next != 0)

{

cout<<"-->";

}

}

cout<<endl<<endl;

}

void LINKED_LIST_CLASS::reverse() {

LIST_NODE *prev = NULL, *following = NULL, *current;

current = front;

while(current != NULL){

following = current->next;

current->next = prev;

prev = current;

current = following;

}

front = prev;

}

int main()

{

LINKED_LIST_CLASS L1;

L1.Add(5);

L1.Add(10);

L1.Add(29);

L1.Add(35);

L1.Print();

L1.reverse();

L1.Print();

return 0;