Could you please implement this Thanks ifndef LINKEDLISTH de
Could you please implement this. Thanks
#ifndef LINKEDLIST_H
#define LINKEDLIST_H
#include <cstdlib>
#include<iostream>
class ListNode
{
public:
typedef int value_type;
ListNode (value_type d = value_type(), ListNode* n = NULL) { datum = d; next = n; }
//Assessor
value_type getDatum () const { return datum; }
ListNode const* getNext () const { return next; }
//Mutator
void setDatum (const value_type& d) {datum = d; }
ListNode* getNext () { return next; }
void setNext (ListNode* new_link) {next = new_link; }
private:
value_type datum;
ListNode* next;
};
class LinkedList
{
public:
LinkedList ();
virtual ~LinkedList ();
void insertItem (ListNode::value_type);
void makeList (const ListNode::value_type [],const size_t& count);
void deleteList ();
//The following friend function is implemented in lablinklist.cpp
friend std::ostream& operator<<(std::ostream&, const LinkedList&);
private:
ListNode* head;
};
#endif
///Main
#include <iostream>
#include \"ll.h\"
using namespace std;
int main() {
LinkedList list1;
//Test of adding items out of order
list1.insertItem(5);
list1.insertItem(20);
list1.insertItem(10);
cout << list1 << endl;
//Test of deleting entire list
list1.deleteList();
cout << list1 << endl;
//Add items again in same order as before
list1.insertItem(5);
list1.insertItem(20);
list1.insertItem(10);
cout << list1 << endl;
//Now replace list with a new one in a specific order
int pow2[] = {1,2,4,8,16,32,16,8,4,2,1};
list1.makeList(pow2,sizeof(pow2)/sizeof(int));
cout << list1 << endl;
//Returning a non-zero number, if not 3, then we know it seg-faulted
return 3;
}
std::ostream& operator<<(std::ostream& os, const LinkedList &srcList) {
//Set a current-pointer to the \"head\".
ListNode* cursor = srcList.head;
//While current-pointer is not NULL
while ( cursor != NULL )
{
//Print the data member (\"datum\") of the current node
os << \"->[\" << cursor->getDatum() << \"]\";
//Set the current-pointer to the \"next\" node in the list.
cursor = cursor->getNext();
}
//Print out a basic termination symbol
std::cout << \"--X\" << std::endl;
return os;
}
Solution
ll.h remains same as provided
//ll.cpp
#include \"ll.h\"
LinkedList::LinkedList()
 {
    head = NULL;
 }
 LinkedList::~LinkedList()
 {
    ListNode *tmp = head;
    while (tmp != NULL)
    {
        head = head->getNext();
        delete tmp;
        tmp = head;
    }
 }
void LinkedList::insertItem(ListNode::value_type item)
 {
    ListNode *newNode,*cur = head;
    newNode = new ListNode;
    newNode->setDatum(item);
    newNode->setNext(NULL);
    if (head == NULL)
    {
        head = newNode;
    }
    else
    {
       while (cur->getNext() != NULL)
        {
            cur = cur->getNext();
        }
        cur->setNext(newNode);
    }
}
void LinkedList::makeList(const ListNode::value_type num[], const size_t& count)
 {
    int i = 0;
    while ( i < count)
    {
        insertItem(num[i++]);
    }
 }
void LinkedList::deleteList()
 {
    ListNode *tmp = head;
    while (tmp != NULL)
    {
        head = head->getNext();
        delete tmp;
        tmp = head;
    }
 }
std::ostream& operator<<(std::ostream& os, const LinkedList &srcList) {
   //Set a current-pointer to the \"head\".
    ListNode* cursor = srcList.head;
   //While current-pointer is not NULL
    while (cursor != NULL)
    {
        //Print the data member (\"datum\") of the current node
        os << \"->[\" << cursor->getDatum() << \"]\";
        //Set the current-pointer to the \"next\" node in the list.
        cursor = cursor->getNext();
    }
    //Print out a basic termination symbol
    std::cout << \"--X\" << std::endl;
return os;
}
---------------------------------------------------------------------------------------------------------------
//main.cpp
remians same as provided
------------------------------------------------------------------------------------------
//output
->[5]->[20]->[10]--X
--X
->[5]->[20]->[10]--X
->[5]->[20]->[10]->[1]->[2]->[4]->[8]->[16]->[32]->[16]->[8]->[4]->[2]->[1]--X





