In my opinion your function is too complicated.
The function can be written simpler. I suppose that you wrote the list in C style.
Node* recursive_ordered_insert( Node *node, int value )
{
if ( ( node == nullptr ) || !( node->value < value ) )
{
return create_node( value, node );
}
node->next = recursive_ordered_insert( node->next, value );
return node;
}
Here is a demonstrative program. All you need is to add a recursive function that will free all allocated memory
#include <iostream>
#include <cstdlib>
#include <ctime>
struct Node
{
int value;
struct Node *next;
};
Node * create_node( int value, Node *next = nullptr )
{
return new Node { value, next };
}
Node* recursive_ordered_insert( Node *node, int value )
{
if ( ( node == nullptr ) || !( node->value < value ) )
{
return create_node( value, node );
}
node->next = recursive_ordered_insert( node->next, value );
return node;
}
std::ostream & recursive_print( Node* node, std::ostream &os = std::cout )
{
return node == nullptr
? os << std::endl
: ( os << node->value << ' ', recursive_print( node->next, os ) );
}
int main()
{
const size_t N = 10;
Node *head = nullptr;
std::srand( ( unsigned int )std::time( nullptr ) );
for ( size_t i = 0; i < N; i++ )
{
head = recursive_ordered_insert( head, std::rand() % ( 2 * N ) );
recursive_print( head );
}
return 0;
}
The program output might look like
3
3 6
3 6 17
3 6 15 17
3 6 13 15 17
3 6 13 15 15 17
3 6 6 13 15 15 17
3 6 6 12 13 15 15 17
3 6 6 9 12 13 15 15 17
1 3 6 6 9 12 13 15 15 17