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;