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;
}
>list.head = pNew;
で常に、リストの最後が head になってるから。
head は最初だけ代入して、
以降は、一つ前を記憶する変数(pOld など)を用意して、
それの link に pNew を代入する。
わかりました^-^
今からトライしてみます。
ありがとうございます。
>Listの一番後ろから表示されます。
そんなことないですよ、ちゃんとListの先頭から表示されています。
arrayと逆順になっているのは、
Listに要素を追加する時に、先頭に挿入しているからです。
つまり、Listにarrayと逆順になるように追加しているのです。
>REE
では、どの用にプログラムを変えればよいですか?
表示する所が悪いんでしょうか?
array[4]から追加していく。
あるいは、
>一つ前を記憶する変数(pOld など)を用意して、
>それの link に pNew を代入する。
の様な感じで、後ろへ繋げる様に変更。
ためしてみます^-^
forループのコンディションを変えてしまうとこのリストの意味が無いような気がするん
ですが^-^;
大丈夫なんでしょうか?
>forループのコンディションを変えてしまうとこのリストの意味が無いような気がするん
ですが^-^;
どう意味が無いと思うのですか?
一応、リストは出来るので良いかと。
シックリこないのであれば、後ろに繋げる様に
変更すればどうでしょうか?
もう一度考え直してみます。
ありがとうございました。