Hey guys sorry for the long extensive code but i am having some trouble with a delete function. It seems that when i delete a node in the middle its loosing the tail so its loosing the nodes which are underneath it.

Im positive that it has nothing to do with my Delete funtion however i am very suspicious that i may not be loading the linked list properly in this function which is causing it. I cant find anything wrong when its inserting in between the list but i just want to make sure? Its suppose to work as a doubly linked list implementation





Code:
       current = menu->headCategory;

    /* Find the right category for the item to be inserted */
    while(current != NULL)
    {
         /* If the right category has been found for the item to be
         inserted. */
         if(strcmp(current->categoryID,categoryIDcopy) == 0)
    {
    
    submenuCurrent = current->headItem;

   /* Increase the number of items when an item is added */
   
    current->numItems++;

   /* If nothing exists in the category, add to the head of the
   item list. */

   if(submenuCurrent == NULL)
   {
         submenuCurrent = submenuNode;
         current->headItem = submenuCurrent;
         submenuCurrent->nextItem = NULL;
         submenuCurrent->prevItem = NULL;
   }
   else
   {
         submenuPrevious = NULL;
         /* Find the right position to insert the item. */
         
        while((submenuCurrent != NULL) &&
        strcmp(submenuCurrent->itemName,
        submenuNode->itemName) < 0)
  {
        submenuPrevious = submenuCurrent;
        submenuCurrent->prevItem = submenuPrevious;
        submenuCurrent = submenuCurrent->nextItem;
  }
        /* If inserting at the head of the list. */
        if(submenuCurrent == current->headItem)
       {
           submenuNode->nextItem = submenuCurrent;
           submenuCurrent = submenuNode;
           current->headItem = submenuCurrent;
           submenuNode->prevItem = NULL;
       }
        /* If adding to the end of the list. */
       else if(submenuCurrent == NULL)
      {
           submenuPrevious->nextItem = submenuNode;
           submenuCurrent = submenuNode;
           submenuCurrent->nextItem = NULL;
           submenuNode->prevItem = submenuPrevious;
      }
        /* If adding somewhere in between the list. */
      else
      {
           submenuPrevious->nextItem = submenuNode;
           submenuNode->nextItem = submenuCurrent;
           submenuNode->prevItem = submenuPrevious;
           submenuCurrent->prevItem = submenuNode;

      }
  }
}
          current = current->nextCategory;