看看这个程序哪里出错了?解决方法

看看这个程序哪里出错了?
#include "stdlib.h"
#include "stdio.h"

struct list
{
 int data;
 struct list *next;
};

typedef struct list node;
typedef node *link;

void main()
{
  link ptr,head;
  int num,i;
  ptr=(link)malloc(sizeof(node));
  ptr=head;
  printf("please input 5 numbers==>\n");
  for(i=0;i<=4;i++)
  {
  scanf("%d",&num);
  ptr->data=num;
  ptr->next=(link)malloc(sizeof(node));
   
  if(i==4) ptr->next=NULL;
  else ptr=ptr->next;
  }

  ptr=head;
  while(ptr!=NULL)
  {printf("The value is==>%d\n",ptr->data);
  ptr=ptr->next;
  }
}

------解决方案--------------------
ptr=head;这句是什么意思呢?head是一个未初始化的数据,你怎么就用呢?如果你想把ptr的值赋值给head的话,那应该是这样的:head=ptr
------解决方案--------------------
对 写反了。
探讨

ptr=head;这句是什么意思呢?head是一个未初始化的数据,你怎么就用呢?如果你想把ptr的值赋值给head的话,那应该是这样的:head=ptr