背景は、リンクされたリストを実装することにより、C でポインターからポインターを試していることです。私の質問は、2 つのコードの違いと、最初のコードでは期待される出力が得られるのに、他のコードでは得られない理由に関するものです。コードの最初の部分が、コード 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 つの要素を追加し、追加するたびにリストを出力すると、出力は期待どおりになります。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;
}
}
出力は次のとおりです。12 | 23 | 34