0

逆方向に出てくるリンクリストがあります。要素を前に配置したいときに、リストの後ろに要素を追加しているようです。私のノードは次のように表示されます。

struct node{
int data;
struct node* next;};

次に、ヘッドと変数を設定します

int info,x,listLength;
struct node *head = NULL;
struct node *temp;
printf("How many nodes?\n");
scanf("%d",&listLength);

ここで、リストに新しいエントリを入力するように求め、ノードに沿って移動します

    for(x=1;x<=listLength;x++){
    printf("Insert an X value for node %d\n",x);
    scanf("%d",&info);
    temp = (struct node*)malloc(sizeof(struct node));
    temp->data = info;
    temp->next = head;
    head = temp;
}

最後に結果を出力し、メモリ領域を解放します

    while(temp!=NULL){
    printf("WE GOT %d\n",temp->data);
    temp = temp->next;
}
free(temp);

ただし、3 つのノードの入力を入力し、1、2、3 の順に入力すると、出力は 3、2、1 になります。これを変更して、ノードが正しい場所に追加されるようにするにはどうすればよいですか? 前もって感謝します!

4

3 に答える 3

0

あなたのコードは言っています

temp->next = head;
head = temp;

したがって、リストの最後ではなく最初に追加しているので、「逆順」が正しいです。最後に追加するには、最後に追加したノード (例: struct node tail) を追跡するか、新しいノードを追加する場所を見つけるために、先頭から次の ptr を next = null まで検索する必要があります。

また:なぜfree(temp)最後に?それwhile(temp != NULL)は temp が null に等しくなければならないことを意味します。リスト全体を解放しようとしていますか、それとも何ですか?

于 2013-06-05T06:35:57.000 に答える
0

ポインターheadは最後のオブジェクトを指しているため、数字が「逆方向」に取得されます。

入力: 1、2、3

head[data: 3] (最後にtemp指されたもの) -> next[data: 2] -> next[data: 1] -> NULL

于 2013-06-05T06:36:21.703 に答える
0

それは正しく機能しています..新しいノードをリストの前に置きたいですよね?1の後に、そう追加しています。リストは 2->1 となり、同様に 3->2->1 となります。

于 2013-06-05T06:37:03.797 に答える