3

私が作成したリストがあります:

struct list_t {
   int value;
   struct list_t* next;
};

私の「addFirst」:

void addFirst(struct list_t* head,int value) {

    struct list_t* toAdd = (struct list_t*) malloc (sizeof (struct list_t));
    toAdd->value = value;

    toAdd->next = head;
    head = toAdd;
}

問題は、新しい「ノード」をリストに追加すると、関数で機能しますが (DDD デバッガーを使用して確認します)、関数を終了してもリストは同じままです。

struct list_t*これは、メソッドが の代わりにa を返すようにすることで実行できることを知っていvoidます。また、 head のポインターへのポインターを引数 ( struct list_t** PtoHead) として渡すことでも可能ですが、私の質問は、メソッドを使用してこれを実行できるかどうかです (つまり、voidへのポインターをheadパラメーターとして持つ)。

4

1 に答える 1

1

あなたはそれを行うことができますが、それは醜いでしょう.

新しい要素を要素番号 2 としてリンクし、それに応じてデータを移動すると、古い頭を新しいものに置き換えながら、その後に新しい要素を追加することもできます。

void addFirst(struct list_t* head, int value)
{
    struct list_t* toAdd = malloc(sizeof *toAdd);

    toAdd->value = head->value;
    head->value = value;
    toAdd->next = head->next;
    head->next = toAdd;
}

これは NULL ではないことを前提としheadています。その場合、このプロトタイプを使用して解決することは不可能だと思います。

それは非常に直感的ではありません。

于 2012-09-28T14:13:02.323 に答える