Linked list 

[戻る]
C++初心者 2005/08/24(水) 19:51:07
Linked listを作ったのですが、表示がListの一番後ろから表示されます。
なぜでしょうか?
コードはこれです。

OS winXP
Visual C++

#include <iostream>
using namespace std;
struct NODE{
    int data;
    NODE *link;
};

struct List{
    NODE *head;
    int count;
};
void printList(List list);

int main(){
    //リストの初期化
    List list;
    int array[] = {3,6,12,4,2};
    list.head = NULL;

    for(int i = 0 ; i < 5 ; i++){
        //ノードの初期化
        //ノードの初期化されたかチェック
        NODE *pNew;
        if(!(pNew = new NODE)){
            return -1;
        }
        pNew->data = array[i];
        pNew->link = list.head;
        list.head = pNew;
        list.count++;
    }
    printList(list);
    return 0;
}
void printList(List list){
    int nodeNo;
    NODE *pWalk = list.head;

    if(list.count == 0){
        cout << "Nothing in list.\n" << endl;
    }else{
        cout << "\ncontents of List" << endl;
        nodeNo=0;
        while(pWalk){
            cout << nodeNo << "\t" << pWalk->data << endl;
            pWalk = pWalk->link;
            nodeNo++;
        }
    }
    cout << "\nThere are " << nodeNo << " nodes in the list" << endl;
}

まきじ 2005/08/24(水) 20:00:51
>list.head = pNew;

で常に、リストの最後が head になってるから。

head は最初だけ代入して、
以降は、一つ前を記憶する変数(pOld など)を用意して、
それの link に pNew を代入する。

C++初心者 2005/08/24(水) 20:09:35
わかりました^−^
今からトライしてみます。
ありがとうございます。

REE 2005/08/24(水) 20:21:57
>Listの一番後ろから表示されます。

そんなことないですよ、ちゃんとListの先頭から表示されています。

arrayと逆順になっているのは、
Listに要素を追加する時に、先頭に挿入しているからです。
つまり、Listにarrayと逆順になるように追加しているのです。

C++初心者 2005/08/24(水) 20:29:59
>REE
では、どの用にプログラムを変えればよいですか?
表示する所が悪いんでしょうか?

まきじ [E-Mail] 2005/08/24(水) 20:40:56
array[4]から追加していく。

あるいは、

>一つ前を記憶する変数(pOld など)を用意して、
>それの link に pNew を代入する。

の様な感じで、後ろへ繋げる様に変更。

C++初心者 2005/08/24(水) 20:49:31
ためしてみます^−^

C++初心者 2005/08/24(水) 20:57:43
forループのコンディションを変えてしまうとこのリストの意味が無いような気がするん
ですが^−^;
大丈夫なんでしょうか?

まきじ 2005/08/24(水) 21:08:18
>forループのコンディションを変えてしまうとこのリストの意味が無いような気がするん
ですが^−^;

どう意味が無いと思うのですか?
一応、リストは出来るので良いかと。

シックリこないのであれば、後ろに繋げる様に
変更すればどうでしょうか?

C++初心者 2005/08/24(水) 21:12:39
もう一度考え直してみます。
ありがとうございました。

古いスレッドには追加発言できません。