リンクリストに新しいノードを挿入(最後に挿入)してから、リンクされたリスト全体を印刷するかどうかを尋ねるプログラムを書いた。ユーザーが値0を入力するたびに、プログラムは停止し、その時点までリンクされたリストを印刷します。ここで最後にノードを追加してリンクリストを作成するにはどうすればよいですか?
コードです:
#include <stdlib.h>
#include <stdio.h>
struct ListNode
{
int data;
struct ListNode *next;
};
int main()
{
int val,
flag = 1;
struct ListNode *p,
*head,
*temp;
printf("press 0 to exit\n");
do
{
printf("enter the data : ");
scanf("%d", &val);
p = (struct ListNode *)malloc(sizeof(struct ListNode));
if(head == NULL)
{
p -> data = val;
p -> next = NULL;
head = p;
temp = p;
}
else
{
p -> data = val;
p -> next = NULL;
temp -> next = p;
}
printf("continue?");
scanf("%d", &flag);
}while(flag != 0);
temp = head;
while(temp != NULL)
{
printf("%d -> ", temp -> data);
temp = temp -> next;
}
printf("\n");
return 0;
}
今、私は出力を取得しています問題は、それが唯一の最初と最後のノードを印刷しているということです。その間の他のノードは印刷されていません。ここで
は、サンプル出力です:
番号:12 13 14 15
出力:12 15
誰も私が間違っているつもりですどこ私に説明してもらえますか?私はいつも関数をすべて関数に入れてやることができましたが、今は関数呼び出しを使わずに同じことを試したかったのです。ヘッドがNULL
あるときは、次のif-elseブロックで
ようこそスタックオーバーフロー。プログラム内の変数の値を見るために、デバッガを使うか、 'printf()'を追加することをお勧めします。これはあなたのコードで何が起こっているのかを理解するのに役立ちます。コードをデバッグする方法を学ぶことは重要なスキルであり、おそらく最初にコードを書くよりも重要です。 –
1) 'head'は初期化されていません。 2) 'temp - > next = p;' - > 'temp = temp - > next = p;' – BLUEPIXY
@BLUEPIXY:あなたは素敵な人の一人です。 ! ;-) – alk