C | 在链接列表中隔离偶数节点和奇数节点

我需要在我的代码中修改一下
函数void sort_list(struct Node * head)将列表分为2个列表:奇数和偶数。 然后当左边的偶数和右边的奇数时,将2个列表返回到一个列表。 一切正常,除了原始列表不在主要更新。 我不会返回新列表。 该function需要无效。 也许我需要以不同的方式发送列表,但我不知道如何。 感谢帮助

#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使用pass-by-value。 所以这:

 void sort_list(struct Node* head) { 

其次是

  sort_list(list); 

list的值传递给函数。

您在函数内部所做的任何更改都是本地的,即不会更改main中list的值。

使用双指针,如:

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

或返回如下指针:

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