here`s my 2cents a nice little cpp doubly linked list class
Code:
CLinkedList *pLL = NULL;
static bool bStart = TRUE;
CLinkedList::~CLinkedList( )
{
delete (pLL);
pLL = NULL;
bStart = TRUE;
}
void CLinkedList::SetToStartNode ( )
{
while (pLL->prev != NULL)
pLL = pLL->prev;
}
void CLinkedList::SetToEndNode ( )
{
while (pLL->next != NULL)
pLL = pLL->next;
}
long CLinkedList::GetNumberOfNodes ( )
{
long lNumberOfNodes;
pLL->SetToStartNode ();
lNumberOfNodes = 0;
while (pLL->next != NULL)
{
pLL = pLL->next;
lNumberOfNodes++;
}
return (lNumberOfNodes);
}
void CLinkedList::DeleteAllNodes ( )
{
pLL->SetToEndNode ();
while (pLL->prev != NULL)
{
pLL = pLL->prev;
delete (pLL->next);
pLL->next = NULL;
}
bStart = TRUE;
return;
}
void CLinkedList::AddNode (int iData)
{
CLinkedList *pNewNode;
if (bStart)
{
bStart = FALSE;
pLL->iData = iData;
pLL->prev = NULL;
pLL->next = NULL;
}
else
{
pLL->SetToEndNode ();
pNewNode = new (CLinkedList);
pLL->next = pNewNode;
pNewNode->prev = pLL;
pNewNode->iData = pLL->iData;
pNewNode->next = NULL;
pLL = pNewNode;
}
}
void CLinkedList::DeleteNode ( )
{
CLinkedList *pNode = NULL;
if (pLL->next != NULL)
pNode = pLL->next;
else if (pLL->prev != NULL)
pNode = pLL->prev;
else // dont delete the start node
return;
pLL->prev->next = pLL->next;
pLL->next->prev = pLL->prev;
pLL = pNode;
return;
}
void CLinkedList::GoToNextNode ( )
{
if (pLL->next != NULL)
pLL = pLL->next;
}
void CLinkedList::GoToPreviousNode ( )
{
if (pLL->prev != NULL)
pLL = pLL->prev;
}
bool CLinkedList::IsNextNodeNull ( )
{
if (pLL->next != NULL)
return FALSE;
return TRUE;
}
bool CLinkedList::IsPrevNodeNull ( )
{
if (pLL->prev != NULL)
return FALSE;
return TRUE;
}
int CLinkedList::GetVar ( )
{
return (pLL->iData);
}
class CLinkedList
{
int iData;
CLinkedList *prev;
CLinkedList *next;
public:
// Class Construction
CLinkedList ( ) : prev(NULL), next(NULL) , iData(0)
{
}
// Class Destruction
virtual ~CLinkedList ( );
// Class Function Prototypes...
void AddNode (int fData);
void DeleteNode ( );
void DeleteAllNodes ( );
void SetToStartNode ( );
void SetToEndNode ( );
long GetNumberOfNodes ( );
void GoToNextNode ( );
void GoToPreviousNode ( );
bool IsNextNodeNull ( );
bool IsPrevNodeNull ( );
int GetVar ( );
};
extern CLinkedList *pLL;
enjoy Dubb.