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;
You have posted this in the articles section of C-C++ and its been quite some time you have been here and so you should not be making the same mistakes over and over again.
I would recommend that you include the prototype for the function, any initialization that takes place in the function, the code for the structure, the statement that calls the function, and the definitions for the variables that serve as arguments in the call. That could prevent a lot of potentially wrong guesses. Help your respondents to help you by including relevant information. If I have to use my crystal ball, I charge more.
I told you in the above response what you should provide if you want more help. Rather than do that, you have just replicated your insufficient post. I assure you that I can build a working doubly-linked list. I can also assure you that I'm not going to write your code for you, or guess at what unseen things you are doing.
Dude, what are you doing with these statements. submenuPrevious = submenuCurrent; submenuCurrent->prevItem = submenuPrevious; submenuCurrent = submenuCurrent->nextItem; The second statement makes the previous ptr on the current node point to itself. there is also some logic missing in inserting at the head. I guess, in the while loop you are trying to find the position, to insert your submenu node. Then why are you altering the previous pointer of the node..