这是我的代码:
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.为什么?
因为在调用时add会收到指针的副本.您可以设置head该功能,但改变了本地副本,没有命名另一个变量head中main().你需要做这样的事情(我只是改变线条;其余的看起来没问题):
void add(Node **head, Node *node) {
*head = node;
}
int main() {
add(&head, node);
}
Run Code Online (Sandbox Code Playgroud)