我的添加功能不起作用,但我不知道为什么。 我认为我的指针有问题。
sgdgsgsg
gsgsdgsdg
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
char ch;
struct Node *next;
} Node;
void print(const Node *list) {
static int n;
if (list != NULL) {
print(list->next);
printf("%c%d ", list->ch, n++);
}
}
/* heres is the fault function */
void add(Node **list, char c) {
Node *n = malloc(sizeof(Node));
n->ch = c;
n->next = NULL;
if (list == NULL) {
list = n;
}
else {
Node * p = list;
while (p->next != NULL)
p = p->next;
p->next = n;
}
}
int main() {
Node *head = NULL;
add(&head, 'A');
add(head, 'B');
add(head, 'C');
print(head);
return 0;
}
答案 0 :(得分:1)
这里
Node **list
list
是Node**
类型,而n
是Node*
类型。因此,
list = n;
不正确。应该是
(*list) = n;
当list
为NULL
时,此检查
if (list == NULL) {
list = n;
}
不正确,应该是
if ((*list) == NULL) {
(*list) = n;
}
也可以在此处致电add()
add(head, 'B');
add(head, 'C');
是错误的,应该是
add(&head, 'A');
add(&head, 'B'); /* pass the address of head */
add(&head, 'C');/* pass the address of head */
最后启用所有编译器警告并阅读这些警告并进行分析。对于例如
gcc -Wall -Wstrict-prototypes -Wpedantic -Werror test.c