C | Segregar nodos pares e impares en una lista enlazada

Necesito una pequeña corrección en mi código
La función void sort_list (struct Node * head) divide la lista en 2 listas: números impares y números pares. luego marge las 2 listas de nuevo a una lista cuando los números pares a la izquierda y los números impares a la derecha. Todo funciona, excepto que la lista original no se actualiza en la página principal. No suelo devolver la nueva lista. la función debe ser nula. tal vez necesito enviar la lista de otra manera pero no sé cómo. gracias por la ayuda

#include  #include  struct Node { int data; struct Node* next; }; struct Node* Create_list(int size) { struct Node* head = NULL, *temp; srand(time(NULL)); for (int i = 0;idata = x; temp->next = head; head = temp; } return head; } void print_list(const struct Node* head) { struct Node* temp=head; while (temp != NULL) { printf("%4d", temp->data); temp = temp->next; } printf("\n"); } void free_list(struct Node* head) { struct Node* to_free = head; while (to_free != NULL) { head = head->next; free(to_free); to_free = head; } } void sort_list(struct Node* head) { struct Node* head_odd, *head_even, *temp; head_odd = head_even = NULL; while (head != NULL) { temp = head; head = head->next; if ((temp->data) % 2 == 0) { temp->next = head_even; head_even = temp; } else { temp->next = head_odd; head_odd = temp; } } head = head_even; while (head_even->next != NULL) { head_even = head_even->next; } head_even->next = head_odd; } void main() { struct Node* list = Create_list(6); print_list(list); sort_list(list); print_list(list); free_list(list); } 

C usa el paso por valor. Así que esto:

 void sort_list(struct Node* head) { 

seguido por

  sort_list(list); 

Pasará el valor de list a la función.

Cualquier cambio que realice para head dentro de la función es local a la cabeza, es decir, no cambiará el valor de list en main.

Use un puntero doble como:

 void sort_list(struct Node** head) { .... *head = .... sort_list(&list); 

o devuelve un puntero como:

 struct Node* sort_list(struct Node* head) { .... return head; list = sort_list(list);