背景是我正在通过实现链表来试验 C 中的指针到指针。我的问题是关于两段代码的区别,以及为什么第一段给出了预期的输出,而另一段则没有。为什么第一段代码没有提前“外部”代码2似乎执行的功能?
void add_node(int x, Node **head){
if(*head == NULL){
Node *new_node = (Node*) malloc(sizeof(new_node));
new_node->x = x;
*head = new_node;
} else {
Node *n = *head;
while(n->next != NULL){
n = n->next;
}
Node *new_node = (Node*) malloc(sizeof(new_node));
new_node->x = x;
n->next = new_node;
}
}
如果我添加 4 个元素并在每次添加后打印列表,则输出符合预期:1 | 12 | 123 | 1234
void add_node(int x, Node **head){
if(*head == NULL){
Node *new_node = (Node*) malloc(sizeof(new_node));
new_node->x = x;
*head = new_node;
} else {
while((*head)->next != NULL){
*head = (*head)->next;
}
Node *new_node = (Node*) malloc(sizeof(new_node));
new_node->x = x;
(*head)->next = new_node;
}
}
输出如下: 1 | 12 | 23 | 34