you can also working iterativ (far less stack problems) if you use a help-array and qsort, eg:
if size is your ll-size and root points to the first element:
Code:
int size = ???, i;
Node *root = ???, *p;
void **a;
puts("Unsorted");
p=root;
while( p ) { printf("\n%d",p->value); p=p->next; };
a = malloc(size*sizeof*a); /* create help array */
i = 0;
p=root;
while( p ) {
a[i++]=p;
p=p->next; };
qsort( a, size, sizeof*a, cmp );
for( i=0; i<size-1; ++i)
((Node**)a)[i]->next = a[i+1];
((Node**)a)[size-1]->next =0;
puts("Sorted");
p=a[0];
free(a); /* free help array */
while( p ) { printf("\n%d",p->value); p=p->next; };
...
/* a Node-compare function to qsort */
int cmp(const void *a,const void *b)
{
return ((*(Node**)a)->value > (*(Node**)b)->value) - ((*(Node**)a)->value < (*(Node**)b)->value);
}