Double linked list in c++ implementation

Adding a Node Before a Given Node

This is similar to adding a node after a given node,except that here we check that if the node to be added is the first node in the list.Here is the function

void addbefore(NODE *nodetoaddbefore,NODE* newnode)
{
	//fn is passed a ptr to a NODE(add of)	//,the node before which to add
	//node(nodetoaddbefore),and the add of the node to be
	//added(newnode)
	if(nodetoaddbefore)// NULL is not passed as the node to add before
	{
		NODE *temp=nodetoaddbefore;
		if(nodetoaddbefore!=first)//node before which to add is not the first node
		{
			temp->prev->next=newnode;
			newnode->next=temp;
			newnode->prev=temp->prev;
			temp->prev=newnode;
		}
		else
		{
			temp->prev->next=newnode;
			newnode->next=temp;
			newnode->prev=temp->prev;
			temp->prev=newnode;
			first=newnode;
		}
		nodecount++;
		cout<<"\n\n\t\tAdded data to list. Press a key to continue ...";getch();
	}
	else
	{
	    cout<<"\n\n\t\tOut of Memory error. Node could not be added ! Press a key to continue ...";getch();
	}

}

Deleting a specified node

The following function deletes a node whose address is passed as the argument.The following conditions are checked :-

  • Node to be deleted is the only node in the list
  • Node to be deleted is the first Node
  • Node to be deleted is the last Node
  • Node to be deleted is any other Node in between

Here is the function

void deletenode(NODE *nodetobedeleted)
	//fn is passed the add of node to be deleted
{
	if(nodetobedeleted)//add passed is not NULL
	{
		if(nodetobedeleted==first && nodetobedeleted==last)//only node
		{
			delete nodetobedeleted;
			first=last=NULL;

		}
		else if(nodetobedeleted==first)
		{
			NODE *temp=first;
			first=first->next;
			delete temp;
			first->prev=NULL;
		}
		else if(nodetobedeleted==last)
		{
			NODE *temp=last;
			last=last->prev;//last changes
			last->next=NULL;
			delete temp;temp=NULL;
		}
		else // none of above,node in between
		{
			nodetobedeleted->prev->next=nodetobedeleted->next;
			nodetobedeleted->next->prev=nodetobedeleted->prev;
			delete nodetobedeleted;nodetobedeleted=NULL;
		}
		nodecount--;
        cout<<"\n\n\t\tDeleted ! Press a key to continue ...";getch();
	}
	else
	{
	    cout<<"\n\t\tcould not delete,Press a key to continue ... !";getch();
	}

}


Continue reading the remaining 3 pages of the article through page links below ....

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.