1

データ構造を学習するために私がフォローしている本では、リンクされたリストのさまざまな位置に新しいノードを追加する関数の引数として「シングルポインター」を使用しています。また、削除の場合は「ポインターツーポインター」が使用されます。これらすべての場合において、関数プロトタイプは次のようになります。

void appendordelete (struct node **, int );

しかし、ノードを数えず、リストを表示し、特定の位置の後に追加する関数では、関数プロトタイプは次のように変更されます。

void anyofthementionedfunctions (struct node *, int );

したがって、リンクリスト操作でシングルポインターを使用する必要がある場合と、ポインターからポインターを使用する場合は混乱しています。どうか明らかにしてください。これらの関数は典型的かつ理想的な方法で機能するため、これらの長い関数のコーディングは投稿しません。

4

1 に答える 1

2

この場合、最初のノードへのポインタを変更できるように、ポインタへのポインタが使用されます。リストの先頭を指すポインターを保持します。新しい項目を追加する場合、新しい項目がリストの先頭に追加される可能性があるため、そのポインターを変更する必要がある場合があります。

void insertAtBeginning(struct node **first_ptr,int value)
{
    struct node *first = malloc(sizeof(struct node));
    first->value = value;
    first->next = *first_ptr;
    *first_ptr = first;
}

void test()
{
    struct node *first = 0;
    insertAtBeginning(&first,5);
    freeAll(first);
}

リストを検索するようなことをしている場合は、最初のノードへのポインターを変更する必要がないため、ポインターにポインターを渡す必要はありません。

ただし、ポインターへのポインターには他の用途があることに注意してください。たとえば、行へのポインターの配列へのポインターとしてマトリックスを維持する場合があります。

于 2013-09-11T04:25:06.160 に答える