0

Linked List を使用していて、where 番目のノードの後に​​データ d を持つ新しいノードを挿入しようとしています。何らかの理由で、間違った結果が得られます。これが私のコードです:

void insertAfter(int d, int where )  
{
    struct list * marker = head;
    struct list * new;

    while(marker -> data != where)
        marker = marker -> next;
    new = (struct list*)malloc(sizeof(struct list));

    new -> next = marker -> next; 
    marker -> next = new;
    new -> data = d; 
}
4

3 に答える 3

0

たぶん、次のようにコードを変更できます (このコードでは、最初のノードは 0 番目のノードで、2 番目のノードは 1 番目です)。

void insertAfter(int d, int where )  
{
    struct list * marker = head;
    struct list * new;
    int count = 0;

    while(count < where)
    {
        count++;
        marker = marker -> next;
    }
    new = (struct list*)malloc(sizeof(struct list));

    new -> next = marker -> next; 
    marker -> next = new;
    new -> data = d; 
}
于 2013-07-10T01:05:54.373 に答える
0

コードは、where 番目のノードではなく、data==where のノードの後に​​新しいノードを挿入しています。次のように記述できます。

int i;
for(i=1; i<where; i++)
    marker = marker->next;

また、markerが に達したかどうか、またはプログラムがまたはNULLを読み込もうとしたときにアボートするかどうかを確認することをお勧めします。marker->nextmarker->data

于 2013-07-10T05:18:31.807 に答える