4

for ループを使用して連結リストにデータを追加したいと考えています。私が期待しているのは 1 2 3 4 5 6 7 8 9 10 私が得ている O/P は 1 1 1 1 1 1 1 1 1 1 です

#include <iostream>
using namespace std;
struct NODE
{
    int data;
    NODE *next;
};
int main()
{
    int i,j=0;
    NODE *start=NULL,*ptr,*temp;
    for (i=1;i<=10;i++)
    {
        ptr = new NODE;
        ptr->data=i;
        ptr->next=NULL;
        if(start==NULL)
            start=ptr;
        else
        {
            temp=start;
            while(temp->next!=NULL)
                temp=temp->next;
            temp->next=ptr;
        }
    }
    temp=start;
    while(temp->next!=NULL)
    {
        cout<<start->data<<"  ";
        temp=temp->next;
    }
    return 0;
}

このプログラムの何が問題になっていますか??

4

4 に答える 4

4

間違っているのはこのループです

temp=start;
while(temp->next!=NULL)
{
    cout<<start->data<<"  ";
    temp=temp->next;
}

以下の方法で変更してください

for ( temp = start; temp; temp = temp->next ) cout << temp->data << ' ';

または、while-loop を使用する場合は、

temp = start;
while ( temp )
{
    cout << temp->data << '  ';
    temp = temp->next;
}

また、name temp の代わりに name next を使用します。例えば

for ( NODE *next = start; next; next = next->next ) cout << next->data << ' ';
于 2013-10-31T17:47:41.047 に答える
2

毎回最初の(開始)ノードを出力しています。

変更する必要があります:

cout<<start->data<<"  ";

に:

cout<<temp->data<<"  ";
      ^^^^
于 2013-10-31T17:43:52.543 に答える
0

このコードを追加すると、ユーザーからデータを取得できます。ユーザーからデータを挿入しないでください。

 for (i=1;i<=5;i++)
{
    ptr = new NODE;
    cout<<"enter data";
    cin>>data;
    ptr->data=data;
    ptr->next=NULL;
    if(start==NULL)
        start=ptr;
    else
    {
        temp=start;
        while(temp->next!=NULL)
            temp=temp->next;
        temp->next=ptr;
    }
}
于 2014-06-10T04:51:38.347 に答える