Рекурсивное добавление элемента в сортированный двухсвязный список
Хочу рекурсивно добавить элемент в двухсвязный список согласно сортировке. Добавление в начало и конец списка работает отлично, а вот если элемент добавляется в средину, то я где-то теряю указатель на прошлый элемент. По итогу у меня обычный вывод (Begin to End) работает отлично, а вот вывод с конца (End to Begin) пропускает мой новый элемент(который добавили). Сижу уже пол часа и не вижу где я пропустил указатель. Скорее всего найти его не сложно, ведь функция легкая, просто уже устал и не вижу. Подскажите пожалуйста, ибо мне нужно по быстрее сдать работу. Только что писал такое же добавление, но просто циклом while и все работало, но тут уже дело принципа))) Хочу победить эту функцию.
void addToSortReccurs(Dish *StartBack, Dish * &Start, Dish *PNew){
if ((Start == NULL) || (PNew->calories <= Start->calories)){
if(Start != NULL){
PNew->next = Start;
if(Start->back != NULL)
Start->back->next = PNew;
PNew->back = Start->back;
Start->back = PNew;
}
else{
if(StartBack != NULL){
PNew->back = StartBack;
StartBack->next = PNew;
}
Start = PNew;
}
}
else
addToSortReccurs(Start,Start->next,PNew);
}
Ответы (1 шт):
Нашел ошибку
else{
StartBack = Start;
Start = Start->next;
addToSortReccurs(StartBack,Start,PNew);
}
Это уже рабочий вариант. Не понял почему функцию что-то не устраивало при таком варианте:
else
addToSortReccurs(Start,Start->next,PNew);
Если кто-то знает, подскажите пожалуйста.