-3

基本的な質問があります。int storage []={8,6,4,2}。なぜこれは246 8を印刷しますが、8 6 4 2を印刷しないのですか?その理由を教えてください。コードのどの部分が原因ですか?理解できませんでした。

コードは次のとおりです。

   #include <iostream>
   #include <string>
   #include <cstdlib>
   #include <ctime>

     using namespace std;

  struct node {
int info;
node *next; 

node::node ()
{}

node::node (const int & s, node * link)
    : info(s), next (link)
{}
    };

    void DisplayList (node * head)
   {
cout << "The list content is: ";
node * ptr = head;
   while (ptr != NULL) 
{
    cout << ptr ->info << " ";
    ptr = ptr->next;
}
cout << endl<<endl;
      }

 int main()
  {
int storage[] = {8,6,4,2};
node *head = NULL;
node *temp = NULL;

for (int k=0; k < 4; k++)  {
    temp = new node();
    temp->info = storage[k];
    temp->next = head;
    head = temp;
}

DisplayList (head);

    cin.ignore();
    cin.get();
    return 0;

}

4

3 に答える 3

2

このコード:

int storage[] = {8,6,4,2};
node *head = NULL;
node *temp = NULL;

for (int k=0; k < 4; k++)  {
    temp = new node();
    temp->info = storage[k];
    temp->next = head;        // <----- here, temp is before head
    head = temp;              //        head is made first node again
}

の前に 各要素を追加します。headこれは、で順番に処理されるため{8,6,4,2}です。したがって、リストを逆の順序で作成します。

于 2013-03-03T13:52:27.697 に答える
0

作成するすべての新しいノードによって上書きされるため、forループheadが逆の順序で追加されます

これはあなたが望むものです。

for (int k=0; k < 4; k++) 
{
    temp = new node();
    temp->info = storage[k];
    temp->next=NULL;
    if(head==NULL)
        head=temp;
    else
        head->next=temp; 
}
于 2013-03-03T13:57:52.503 に答える
0

ストレージのもう一方の端から充填を開始するか、次のようにすることができます。

int storage[] = {8,6,4,2};
node *head = NULL;
node *temp = NULL;
node *previous = NULL;

for (int k=0; k < 4; k++)  {
    temp = new node();
    if (head == NULL)
    {
       head = temp;
    }
    if (previous != NULL)
    {
       previous->next = temp;
    }
    temp->info = storage[k];
    previous = temp;
}
于 2013-03-03T13:57:53.110 に答える