以下の文は5つの数値の入力を受け取ってnumberlistとして値を返すプログラムです。
双方向リストの勉強をしています。今回のコードは片方向リストです

最後にあるwhileループだけカンマを出力しないようにしたいのですが、こういうときはどうするのが最も空間計算量が少なくて済みますか?

一応、endという構造体のアドレスをつくってi=4のときに結びつけるようにしたつもりなのですがうまくいきません。

#include <stdio.h>
#include <stdlib.h>

struct number{
  int num;
  struct number *next;
};

int main(){
  struct number *p, *head, *end;
  end=(struct number *)malloc(sizeof(struct number));
  int i;
  printf("input 5 number:");
  for(i=0;i<5;i++){
    if(i==0){
      p=(struct number *)malloc(sizeof(struct number));
      head=p;
      if(i==4){
        end=p;
        p->next=NULL;
      }
    }else{
    p->next=(struct number *)malloc(sizeof(struct number));
    p=p->next;
    }
    scanf("%d", &p->num);
    p->next=NULL;
  }
  p=head;
  printf("number list:");
  while(p!=NULL){
    if(p==end){
      printf("%d", p->num);
      p=p->next;
    }else{
    printf("%d, ", p->num);
    p=p->next;
    }
  }
  printf("\n");
  return 0;
}