Deleting a Record from a Linked List


Imagine the following linked list:



First ->
	Alice	 	Bob		Charlie		David
	->		->		->		NULL	

Imagine that we want to delete "Charlie's" record from the list.

Here is the algorithm:

if the record we want to delete is the first record
	make the second record the new first record
	delete the memory for the old first record
else 
	loop until we find Charlie or go off the end of the list (if Charlie isn't on the list)
	if we got to NULL (Charlie isn't on the list)
		print Charlie not found
	else
		link previous record to Charlie to the record after Charlie
		delete the memory for Charlie's record

Given:	

struct person
{
	string name;
	person * next;
};

The code might look something like:

structptr  temp,prev;

temp=first;		//assume first points to the start of the list
if (first->name=="Charlie")
{
	first=first->next;
	delete temp;
}
else
{	//loop until we find Charlie or get to the end
	while(temp->name!="Charlie" && temp->next!=NULL)
	{
		prev=temp;		//remember previous record
		temp=temp->next; 	//move to the next record
	}
	if(temp->name=="Charlie")	//if we found Charlie
	{
		prev->next=temp->next; 	//link the previous record to the record after Charlie
		delete temp;		//delete the memory for Charlie's record
	}
	else
		cout<<"Charlie is not on the list.";
}