Рекурсивное добавление элемента в сортированный двухсвязный список

Хочу рекурсивно добавить элемент в двухсвязный список согласно сортировке. Добавление в начало и конец списка работает отлично, а вот если элемент добавляется в средину, то я где-то теряю указатель на прошлый элемент. По итогу у меня обычный вывод (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 шт):

Автор решения: luseppe

Нашел ошибку

else{
        StartBack = Start;
        Start = Start->next;
        addToSortReccurs(StartBack,Start,PNew);
    }

Это уже рабочий вариант. Не понял почему функцию что-то не устраивало при таком варианте:

else
        addToSortReccurs(Start,Start->next,PNew);

Если кто-то знает, подскажите пожалуйста.

→ Ссылка