I have a c++ code that does not compile. if you copy and paste the code into a c
ID: 3783906 • Letter: I
Question
I have a c++ code that does not compile.
if you copy and paste the code into a compiler you will notice the bugs
can you fix them and make it compile?
CODE:
#include <iostream>
#include <cstddef> //for NULL
using namespace std;
template <class listdata>
List<listdata> ::List()
{
first = NULL;
last = NULL;
size = 0;
}
List<listdata> ::~List()
{
Nodeptr cursor = first;
Nodeptr temp;
while(cursor != NULL)
{
temp = cursor->next;
delete cursor;
cursor = temp;
}
}
listdata List:: getFirst()
{
return first->data;
}
listdata List:: getLast()
{
return last->data;
}
bool List:: isEmpty()
{
return (size == 0);
}
int List:: getSize()
{
return size;
}
void List<listdata>::printList()
{
Nodeptr temp = first;
while (temp != NULL)
{
cout << temp->data << " ";
temp = temp->next;
}
cout << endl;
}
void List<listdata>:: removeLast()
{
if (size == 0)
{
cout << "the list is empty, no element to remove!" << endl;
}
else if (first->next == NULL)
{
delete last;
first = NULL;
last = NULL;
size = 0;
}
else
{
Nodeptr temp = first;
while (temp->next != last)
{
temp = temp->next;
}
delete last;
last = temp;
last->next = NULL;
size--;
}
}
void List<listdata>:: removeFirst()
{
if (size == 0)
{
cout << "the list is empty, there is nothing to remove!" << endl;
}
else if (size == 1)
{
delete first;
first = last = NULL;
size = 0;
}
else
{
Nodeptr temp= first;
first = first->next;
delete temp;
size --;
}
}
void List<listdata>:: insertLast (listdata data)
{
if (size == 0)
{
first = new Node(data);
last = first;
}
else
{
last -> next = new Node(data);
last = last -> next;
}
size++;
}
void List<listdata>::insertFirst(listdata data)
{
if (size==0)
{
first = new Node(data);
last = first;
}
else
{
Nodeptr N = new Node(data);
N->next = first;
first = N;
}
size++;
}
Explanation / Answer
Hi Friend, I have fixed all compile time error.
Please let me know in case of any issue.
########### listdata.h ##########
template <class listdata>
class List{
public:
List();
~List();
listdata getFirst();
listdata getLast();
bool isEmpty();
int getSize();
void printList();
void removeLast();
void removeFirst();
void insertLast (listdata data);
void insertFirst(listdata data);
private:
struct Node
{
listdata data;
Node* next;
Node(listdata data): data(data), next(NULL){}
};
typedef struct Node* Nodeptr;
Nodeptr first;
Nodeptr last;
int size;
};
############# listdata.cpp ###########
#include <iostream>
#include <cstddef> //for NULL
#include <cstdlib>
#include "listdata.h"
using namespace std;
template <class listdata>
List<listdata> ::List()
{
first = NULL;
last = NULL;
size = 0;
}
template <class listdata>
List<listdata> ::~List()
{
Nodeptr cursor = first;
Nodeptr temp;
while(cursor != NULL)
{
temp = cursor->next;
delete cursor;
cursor = temp;
}
}
template <class listdata>
listdata List<listdata>:: getFirst()
{
return first->data;
}
template <class listdata>
listdata List<listdata>:: getLast()
{
return last->data;
}
template <class listdata>
bool List<listdata>:: isEmpty()
{
return (size == 0);
}
template <class listdata>
int List<listdata>:: getSize()
{
return size;
}
template <class listdata>
void List<listdata>::printList()
{
Nodeptr temp = first;
while (temp != NULL)
{
cout << temp->data << " ";
temp = temp->next;
}
cout << endl;
}
template <class listdata>
void List<listdata>:: removeLast()
{
if (size == 0)
{
cout << "the list is empty, no element to remove!" << endl;
}
else if (first->next == NULL)
{
delete last;
first = NULL;
last = NULL;
size = 0;
}
else
{
Nodeptr temp = first;
while (temp->next != last)
{
temp = temp->next;
}
delete last;
last = temp;
last->next = NULL;
size--;
}
}
template <class listdata>
void List<listdata>:: removeFirst()
{
if (size == 0)
{
cout << "the list is empty, there is nothing to remove!" << endl;
}
else if (size == 1)
{
delete first;
first = last = NULL;
size = 0;
}
else
{
Nodeptr temp= first;
first = first->next;
delete temp;
size --;
}
}
template <class listdata>
void List<listdata>:: insertLast (listdata data)
{
if (size == 0)
{
first = new Node(data);
last = first;
}
else
{
last -> next = new Node(data);
last = last -> next;
}
size++;
}
template <class listdata>
void List<listdata>::insertFirst(listdata data)
{
if (size==0)
{
first = new Node(data);
last = first;
}
else
{
Nodeptr N = new Node(data);
N->next = first;
first = N;
}
size++;
}
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.