谁能告诉我为什么添加功能不起作用?

时间:2019-01-13 14:45:28

标签: c pointers linked-list

我的添加功能不起作用,但我不知道为什么。 我认为我的指针有问题。

  

sgdgsgsg

  1. 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;
    }
    

1 个答案:

答案 0 :(得分:1)

这里

Node **list

listNode**类型,而nNode*类型。因此,

list = n;

不正确。应该是

(*list) = n;

listNULL时,此检查

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