这个单链表程序在visual C++上有异常,还是小弟我的visual C++编译器有有关问题,求大神指点

这个单链表程序在visual C++上有错误,还是我的visual C++编译器有问题,求大神指点
#include<stdio.h>
#include<stdlib.h>
typedef int datatype;
typedef struct link_node
{datatype info;
struct link_node*next;
}node;

void display(node*head)
{node*p;
p=head;
if(!p)printf("\n单链表是空的");
else
{
printf("\n单链表各个结点的值为:\n");
while(p)
{printf("%5d",p->info);p=p->next;}
}
}

node*find(node*head,int i)
{
int j=1;
node*p=head;
if(i<1)return NULL;
while(p&&i!=j)
{
p=p->next;j++;
}
return p;
}

void *insert(node*head,datatype x,int i)
{
node*p,*q;
q=find(head,i);
if(!q&&i!=0)
printf("\n找不到第%d个结点",i);
else{
p=(node*)malloc(sizeof(node));
p->info=x;
if(i==0){
p->next=head;
head=p;}
else{p->next=q->next;
q->next=p;}}
return head;}

void main()
{node*head=NULL;
int x,i,n;
printf("要插入的个数");
scanf("%d",&n);
printf("要输入");
for(i=0;i<n;i++)
{scanf("%d",&x);
insert(head,x,i);
}
printf("输出");
display(head);
}

------解决方案--------------------
你的程序很有问题..insert函数明明有返回值,却用的是void ..返回的是head,  那么前面函数的返回值应该是node型
继续的下面就没法看了..main函数里面的head让人不知道怎么回事..
比较粗糙很粗糙,都得改...