Это также должно работать, если вы сделаете эту настройку для своего кода, где вы заново назначаете значение nextNode
обратно на (*node)->next
, так как вы передали это значение по ссылке на рекурсивный вызов функции (и, следовательно, оно было изменено во время последующие рекурсивные вызовы):
void addRecursion(lnode **node, lnode *newNode)
{
if(*node == NULL)
{
*node = newNode;
return;
}
lnode *nextNode = (*node)->next;
addRecursion(&nextNode, newNode);
(*node)->next = nextNode; //Add this line to re-connect the link
}
Версия Криса, приведенная выше, немного чище, поскольку она исключает два назначения и при этом также экономит место в стеке, поскольку для локальной переменной-указателя не требуется хранения nextNode
.