将此元素添加到链表时此函数有什么问题?

Yug*_*dle 1 c linked-list

这是我的代码:

typedef struct node {
    int data;
    struct node *next;
} Node;

void add(Node *head, Node *node) {
    Node *ptr;
    ptr = head;
    if(head==NULL) {
        head=node;
    }
    else {
        while(ptr->next != NULL) {
            ptr = ptr->next;
        }
        ptr->next = node;
    }
}

Node* create(int a) {
    Node *node;
    node = (Node*)malloc(sizeof(Node));
    node->data = a;
    node->next = NULL;
    return node;
}

int main() {
    Node *head;
    head = NULL;
    int i;
    for(i=0; i<10; i++) {
        Node *node;
        node = create(i);
        add(head, node);
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是:head在函数add中重新定义,每次调用add.为什么?

Tom*_*m W 6

因为在调用时add会收到指针的副本.您可以设置head该功能,但改变了本地副本,没有命名另一个变量headmain().你需要做这样的事情(我只是改变线条;其余的看起来没问题):

  void add(Node **head, Node *node) {
    *head = node;
  }



int main() {
    add(&head, node);
 }
Run Code Online (Sandbox Code Playgroud)