前提
ここに質問の内容を詳しく書いてください。
はじめてこのサイトを使うので、不慣れです。
至らぬ点が多くあると思いますが、宜しくお願いします。
C言語のリスト構造の最後尾についての質問です。
反復を用いて、計5回入力させて、それを表示するリストを作っています。
例えば、50 → 100 → 150 → 200 → 250と入力させると、
250
200
150
100
50
と表示されるリストです。
このリストを入力順(つまり新たに入力した要素を最後尾に)持っていくリストも一緒に作りたいのですができません。
エラーメッセージなどはありません。
このプログラムでは、入力順となっていて、
pNew->next = NULL;
これが最後尾となっています。
最後尾の次の要素はNULLとして置く、これが最後尾であるということだと学びました。
これと同じ要領で、新たに入力した要素を最後尾に持っていくためには、ダミーデータとして置いているlistHead.nextをNULLとして置くのではないかと考えています。
そうすれば、
ダミーデータ
50
100
150
200
250
となるのではないか、と思い作っていました。
しかし、そもそもどのようにして最後尾までリストを繋げたら良いのかがわかりません。
ネット上に上がっているリスト構造の最後尾のやり方についての記事をいくつか読み、それをもとに作ってもみましたが、できませんでした。
実現したいこと
・入力したデータが最後尾となるようなリストにしたい
・このプログラムを大幅に改変させずにつくりたい
(今質問していることも含めて、かなり考えて自分の納得のいくプログラムを作ったつもりです。ですので、かなり愛着があります。このプログラムの内容をほぼ全部潰して...というのは嫌です)
質問している身でありながら、わがままばかり言ってしまいすみません。
発生している問題・エラーメッセージ`
・エラーメッセージ等はでていません。
該当のソースコード
#include <stdio.h> #include <stdlib.h> struct list{ int element; struct list *next; }; typedef struct list List; void showList(List* pHead); int main(void){ List listHead; List *pNew; /*新しい要素ポインタ*/ List *pIns; /*要素の挿入場所になる要素のポインタ*/ List *p; int inData, i; listHead.element=-1; listHead.next=NULL; for(i=0;i<5;i++){ printf("input data"); scanf("%d", &inData); printf("==================\n"); pNew=(List*)malloc(sizeof(List)); pNew->element=inData; pNew->next=NULL; pIns=&listHead; pNew->next = pIns->next; pIns->next = pNew; showList(&listHead); printf("==================\n"); } return 0; } void showList(List *pHead){ List *p; p=pHead; while(p!=NULL){ printf("element:%d\n",p->element); p=p->next; } return ; }
試したこと
pNew->next = NULL;
pIns = &listHead;
pNew->next = pins->next;
pIns->next = pNew;
これを逆にすればできるのではないかと思い、
listHead.next = NULL;
ここまでは分かったのですが、ここから先がまったくと言っていいほどわかりません。
色々並び変えてみたのですが、失敗に終わっています。
補足情報(FW/ツールのバージョンなど)
追加、削除、探索等のリストならではのものはひとまず置いておいて、まず入力した値を最後尾に持っていくプログラムを目指しています。
回答3件
あなたの回答
tips
プレビュー