我的代码中需要一点修复 函数void sort_list(struct Node * head)将列表分为2个列表:奇数和偶数。然后当左边的偶数和右边的奇数时,将2个列表返回到一个列表。 一切正常,除了原始列表不在主要更新。 我不会返回新列表。该功能需要无效。 也许我需要以不同的方式发送列表,但我不知道如何。 谢谢你的帮助
#include <stdio.h>
#include <time.h>
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;i<size;i++) {
int x = rand() % 10 + 1;
temp = (struct Node*)malloc(sizeof(struct Node));
temp->data = 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);
}
答案 0 :(得分:1)
C使用pass-by-value。所以这个:
void sort_list(struct Node* head) {
接着是
sort_list(list);
会将list
的值传递给函数。
您对函数内head
所做的任何更改都是本地的,即不会更改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);