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

Help with linked list! In this experiment you will investigate the implementatio

ID: 3560191 • Letter: H

Question

Help with linked list!

In this experiment you will investigate the implementation of a singly-linked list with a header node.

#include <iostream>

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

private:

       LIST_NODE *front; // pointer to front of list (header node)

};

LINKED_LIST_CLASS::LINKED_LIST_CLASS()

{

       cout << endl << "The 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(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 << endl << endl;

}

int main()

{

       LINKED_LIST_CLASS L1;

       L1.Add(5);

       L1.Add(10);

       L1.Add(29);

       L1.Print();

       LINKED_LIST_CLASS L2 = L1;

       L2.Print();

       return 0;

}

Question 1: What is the output of the program in Step 2?

Question 2: Please draw the list object, L2, for the program in Step 2.

Question 3: What is the purpose of the back pointer in the copy constructor for the program in Step 2?

Question 4: Is the front of L2 ever equal to 0 or null? Please explain your answer.

Question 5:What are the contents of the header node for L2?

Explanation / Answer

#include <iostream>
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
private:
       LIST_NODE *front; // pointer to front of list (header node)
};
LINKED_LIST_CLASS::LINKED_LIST_CLASS()
{
       cout << endl << "The 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(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 << endl << endl;
}
int main()
{
       LINKED_LIST_CLASS L1;
       L1.Add(5);
       L1.Add(10);
       L1.Add(29);
       L1.Print();
       LINKED_LIST_CLASS L2 = L1;
       L2.Print();
       return 0;
}
Question 1: What is the output of the program in Step 2?
29-->10-->5
Question 2: Please draw the list object, L2, for the program in Step 2.
29-->10-->5
Question 3: What is the purpose of the back pointer in the copy constructor for the program in Step 2?
purpose of back pointer is to copy data from Linked list L1 to list L2.
Question 4: Is the front of L2 ever equal to 0 or null? Please explain your answer.
front of L2 is equal to 0.
Question 5: What are the contents of the header node for L2?
header node for L2 contains pointer null and data of -10000

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote