1

这是我的代码:

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);
    }
}

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

4

1 回答 1

6

因为当您调用它时add会收到您的指针的副本。您head在该函数中进行了设置,但这会更改本地副本,而不是更改名为headin 的其他变量main()。你需要做这样的事情(我只是把线改了;其余的看起来还不错):

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



int main() {
    add(&head, node);
 }
于 2012-10-15T20:15:40.763 回答