Final class code as of now. I need to figure out how to setup a delete member function correctly. It needs to accept a value and any node less than that it deletes.
Code:
#include <iostream>
using namespace std;
template <class T>
class LinkedList
{
private:
// Declare a type for the list node
class ListNode
{
friend LinkedList<T>;
T value;
ListNode *next;
ListNode(T value1, ListNode *next1 = NULL)
{
value = value1;
next = next1;
}
};
ListNode *head;
void showList(ListNode*);
public:
LinkedList()
{
head = NULL;
}
~LinkedList();
void appendNode(T);
void insertNode(T);
void deleteNode(T);
void displayList();
};
template<class T>
void LinkedList<T>::showList(ListNode * nodePtr)
{
//ListNode *nodePtr;
//nodePtr = head;
if(nodePtr != NULL)
{
cout<<nodePtr->value<<endl;
this->showList(nodePtr->next);
}
}
///////////////////////////////////////////////////////
// appendNode appends a node containing the value
// val passed as a parameter to the end of the list.
///////////////////////////////////////////////////////
template<class T>
void LinkedList<T>::appendNode(T val)
{
if(head == NULL)
head = new ListNode(val);
else
{
// nonempty list
ListNode *nodePtr; // used to traverse the list
nodePtr = head;
// traverse list to locate last node
while (nodePtr ->next != NULL)
nodePtr = nodePtr->next;
// ptr->next is NULL so nodePtr points to last node
// create new node and make it successor of what
// is now the last node
nodePtr->next = new ListNode(val);
}
}
///////////////////////////////////////////
// displayList shows the value
// stored in each node of the linked list
// pointed to by the head.
///////////////////////////////////////////
template<class T>
void LinkedList<T>::displayList()
{
this->showList(this->head);
}
///////////////////////////////////////////////
// The insertNode function inserts a node with
// val copied to its value member.
///////////////////////////////////////////////
template<class T>
void LinkedList<T>::insertNode(T val)
{
ListNode *nodePtr, *previousNodePtr;
if (head == NULL || head->value <= val)
{
// new node goes at beginning
head = new ListNode(val, head);
}
else
{
previousNodePtr = head;
nodePtr = head->next;
// find the insertion point
while(nodePtr != NULL && nodePtr->value > val)
{
previousNodePtr = nodePtr;
nodePtr = nodePtr->next;
}
// creates the new node and inserts it
// just before nodePtr
previousNodePtr->next= new ListNode(val, nodePtr);
}
}
/////////////////////////////////////////////////////
// The deleteNode function searches for a node
// with val less than its value, the node, if found, is
// delete from the list and from memory
/////////////////////////////////////////////////////
template<class T>
void LinkedList<T>::deleteNode(T val)
{
ListNode *nodePtr, *previousNodePtr;
// if the list is empty, do nothing
if(!head)
return;
// determine if the first node is the one to delete
if(head->value < val)
{
nodePtr = head;
head = head->next;
delete nodePtr;
}
else
{
// initialize nodePtr to head of list
nodePtr = head;
// skip all nodes whose value member is
// not equal to val
while(nodePtr != NULL && nodePtr->value >= val)
{
previousNodePtr = nodePtr;
nodePtr = nodePtr->next;
}
// Link the previous node to the node after
// nodePtr, then delete nodePtr
if(nodePtr)
{
previousNodePtr->next = nodePtr->next;
delete nodePtr;
}
}
}
////////////////////////////////////////////////
// Destructor
// This function deletes every node in the list
////////////////////////////////////////////////
template<class T>
LinkedList<T>::~LinkedList()
{
ListNode *nodePtr, *nextNodePtr;
nodePtr = head;
while(nodePtr != NULL)
{
nextNodePtr = nodePtr->next;
delete nodePtr;
nodePtr = nextNodePtr;
}
}
Code to look at
Code:
/////////////////////////////////////////////////////
// The deleteNode function searches for a node
// with val less than its value, the node, if found, is
// delete from the list and from memory
/////////////////////////////////////////////////////
template<class T>
void LinkedList<T>::deleteNode(T val)
{
ListNode *nodePtr, *previousNodePtr;
// if the list is empty, do nothing
if(!head)
return;
// determine if the first node is the one to delete
if(head->value < val)
{
nodePtr = head;
head = head->next;
delete nodePtr;
}
else
{
// initialize nodePtr to head of list
nodePtr = head;
// skip all nodes whose value member is
// not equal to val
while(nodePtr != NULL && nodePtr->value >= val)
{
previousNodePtr = nodePtr;
nodePtr = nodePtr->next;
}
// Link the previous node to the node after
// nodePtr, then delete nodePtr
if(nodePtr)
{
previousNodePtr->next = nodePtr->next;
delete nodePtr;
}
}
}