2

私はこの質問を見ました:

次のコードを使用して要素 oa リストを追加します。C リンク リスト 最後にノードを挿入

int addNodeBottom(int val, node *head){

    //create new node
    node *newNode = (node*)malloc(sizeof(node));

    if(newNode == NULL){
        fprintf(stderr, "Unable to allocate memory for new node\n");
        exit(-1);
    }

    newNode->value = val;
    newNode->next = NULL;  // Change 1

    //check for first insertion
    if(head->next == NULL){
        head->next = newNode;
        printf("added at beginning\n");
    }

    else
    {
        //else loop through the list and find the last
        //node, insert next to it
        node *current = head;
        while (true) { // Change 2
            if(current->next == NULL)
            {
                current->next = newNode;
                printf("added later\n");
                break; // Change 3
            }
            current = current->next;
        };
    }
    return 0;
} 

ヘッドを内部で変更し、その変更を関数の外部に反映させたい場合に*head、ヘッドがノードとして渡されるのはなぜですか? node **headここで何が欠けていますか?

4

3 に答える 3

3

headこの関数で直接変更されることはありません。のみhead->nextが別の値に割り当てられます。したがって、ポインターへのポインターを使用する必要はありません。

于 2013-02-13T18:01:27.870 に答える
0

基本的に、それができなかった理由はありません。実際、これは、LinusTorvaldsがポインターに対する習熟を示していると指摘していることの1つです。関連する質問:ポインタを使用して、単一リンクリストからアイテムを削除する

于 2013-02-13T18:03:36.077 に答える