双方向リストについて 構造体のポインタの扱い
以下のコードは、5つの数値を入力で受け取り、受け取った順にnumberlistとして出力しその後、逆順でnumberlistを出力するプログラムです。
NULLの扱いが悪いのか、双方向リスト自体が間違っているのかよく分かりません。
#include <stdio.h>
#include <stdlib.h>
struct number{
int num;
struct number *next, *prev;
};
int main(){
struct number *p, *head, *start, *last;
int i;
start=(struct number *)malloc(sizeof(struct number));
last=(struct number *)malloc(sizeof(struct number));
head=(struct number *)malloc(sizeof(struct number));
head->next=head;
head->prev=head;
head->num=NULL;
printf("input 5 number:");
for(i=0;i<5;i++){
if(i==0){
p=(struct number *)malloc(sizeof(struct number));
p->prev=head;
start=p;
}
p->next=(struct number *)malloc(sizeof(struct number));
(p->next)->prev=p;
scanf("%d", &p->num);
p=p->next;
last=p;
}
last->next=head;
p=start;
printf("number list:");
while(p->num!=NULL){
if(p==last){
printf("%d", p->num);
}else{
printf("%d, ", p->num);
}
p=p->next;
}
printf("\n");
p=last;
printf("number list:");
while(p->num!=NULL){
if(p==start){
printf("%d", p->num);
}else{
printf("%d, ", p->num);
}
p=p->prev;
}
printf("\n");
return 0;
}