A
Andrew Edwards
The following function results in an infinite loop! After 5+ hours of
debugging, I am still unable to decipher what I am incorrectly. Any
assistance is greatly appreciated.
Thanks in advance,
Andrew
==========>Code<==========
//--------------------------------------------------------------------
//
// Recursive cRemove() function implemented in In-lab Exercise 3
//
//--------------------------------------------------------------------
template < class DT >
void List<DT>:: cRemove()
// Recursively removes all occurrences of the character 'c' from a list
// of characters. Moves cursor to the beginning of the list.
{
cRemoveSub(head);
cursor = head;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
template < class DT >
void List<DT>:: cRemoveSub ( ListNode<DT>*& p )
// Recursive partner to the cRemove() function.
{
ListNode<DT>* delete_node;
ListNode<DT>* prior_node;
if ( p == NULL )
{
return;
}
else if ((p->dataItem == 'c' || p->dataItem == 'C') && (p == head))
{
delete_node = p;
head = p = p->next;
delete delete_node;
cRemoveSub(p);
}
else if ((p->dataItem == 'c' || p->dataItem == 'C') && (p->next != 0))
{
delete_node = p;
p = p->next;
prior_node = head;
while(prior_node->next->dataItem != 'c' &&
prior_node->next->dataItem != 'C')
{
prior_node = prior_node->next;
}
delete delete_node;
prior_node->next = p;
cRemoveSub(p);
}
else if (p->next == 0)
{
delete p;
p = 0;
}
else
{
cout << "Else: " << '[' << p->dataItem
<< "]->[" << p->next->dataItem << ']' << endl;
cRemoveSub(p->next);
}
}
debugging, I am still unable to decipher what I am incorrectly. Any
assistance is greatly appreciated.
Thanks in advance,
Andrew
==========>Code<==========
//--------------------------------------------------------------------
//
// Recursive cRemove() function implemented in In-lab Exercise 3
//
//--------------------------------------------------------------------
template < class DT >
void List<DT>:: cRemove()
// Recursively removes all occurrences of the character 'c' from a list
// of characters. Moves cursor to the beginning of the list.
{
cRemoveSub(head);
cursor = head;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
template < class DT >
void List<DT>:: cRemoveSub ( ListNode<DT>*& p )
// Recursive partner to the cRemove() function.
{
ListNode<DT>* delete_node;
ListNode<DT>* prior_node;
if ( p == NULL )
{
return;
}
else if ((p->dataItem == 'c' || p->dataItem == 'C') && (p == head))
{
delete_node = p;
head = p = p->next;
delete delete_node;
cRemoveSub(p);
}
else if ((p->dataItem == 'c' || p->dataItem == 'C') && (p->next != 0))
{
delete_node = p;
p = p->next;
prior_node = head;
while(prior_node->next->dataItem != 'c' &&
prior_node->next->dataItem != 'C')
{
prior_node = prior_node->next;
}
delete delete_node;
prior_node->next = p;
cRemoveSub(p);
}
else if (p->next == 0)
{
delete p;
p = 0;
}
else
{
cout << "Else: " << '[' << p->dataItem
<< "]->[" << p->next->dataItem << ']' << endl;
cRemoveSub(p->next);
}
}