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..