Thanks for the input. I've changed "if(prev == NULL)" to "if(!prev && !curr)" for checking if the list is empty. I am now getting the same error when I add more than one name. I think I've been staring at this for too long. Here is the updated whole code:
Ack! My spacing got all screwy when i pasted it. I'm fixing it now, sorry.
Code:
#include <iostream>
#include <string.h>
using namespace std;
#include "list.h"
//=========================================================
// Constructor
//=========================================================
list::list()
{
num_in_list = 0;
head = NULL;
}
//==========================================================
// Destructor
//==========================================================
list::~list()
{
node * curr; //temporary pointer for deleting
//deletes vacation photo list
while(head)
{
curr = head->next;
delete [] head->fname;
delete [] head->lname;
delete head;
head = curr;
}
}
//==========================================================
// Add
//==========================================================
int list::add(char firstname[30], char lastname[30])
{
node * prev = NULL;
node * curr = head;
//find position of last name
while(curr != NULL && (strcmp(curr->lname, lastname) < 0))
{
prev = curr;
curr = curr->next;
}
if(!curr && !prev)
{
head = new node;
head->fname = new char[strlen(firstname)+1];
strcpy(head->fname, firstname);
head->lname = new char[strlen(lastname)+1];
strcpy(head->lname, lastname);
head->next = curr;
++num_in_list;
return 0;
}
else
{
//if last names are equal, order by firstname
while(strcmp(curr->lname, lastname) == 0 &&
strcmp(curr->fname, firstname) < 0)
{
prev = curr;
curr = curr->next;
}
prev->next = new node;
prev = prev->next;
head->fname = new char[strlen(firstname)+1];
strcpy(head->fname, firstname);
head->lname = new char[strlen(lastname)+1];
strcpy(head->lname, lastname);
prev->next = curr;
++ num_in_list;
return 0;
}
return 0;
}
//==========================================================
// Remove
//==========================================================
int list::remove(char firstname[30], char lastname[30])
{
node * curr;
node * prev;
curr = head;
while((curr != NULL) && ((strcmp(curr->lname, lastname) + strcmp(curr->fname, firstname) != 0)))
{
curr = curr->next;
}
if(curr == NULL)
{
cout << "NO MATCH FOUND" << endl;
return 0;
}
if(curr == head)
{
head = curr->next;
delete [] curr->fname;
delete [] curr->lname;
delete curr;
curr = NULL;
-- num_in_list;
}
else
{
prev = head;
while(prev->next != curr)
{
prev = prev->next;
}
prev->next = curr->next;
delete [] curr->fname;
delete [] curr->lname;
delete curr;
curr = NULL;
-- num_in_list;
}
return 0;
}
//==========================================================
// Display
//==========================================================
int list::display()
{
node * curr;
curr = head;
while(curr)
{
cout << curr->fname << " " << curr->lname << endl;
curr = curr->next;
}
return 0;
}