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
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.