[size=5]程序运行后为什么在屏幕下显示 NULL Pointer Assignmen[/size]
//=============================================

#include<stdio.h>
#include<malloc.h>

typedef struct node       //猴子结构定义
{   int num;          //序号    
    struct node *next;
} node,*linklist;
//=============================================

void Initlist(linklist L)     //初始化链表

{    L=(linklist)malloc(sizeof(node));
     //建立头结点
     L->next=NULL;
}

void creat(linklist L,int n)    //尾插法建循环表
{    node *r,*p;         
     r=L;
     int i;
     for(i=0;i<n;i++)
     {    p=(node*)malloc(sizeof(node));
          printf("enter you number of the monkey\n");
          scanf("%d",&p->num);                                               
          r->next=p;
          r=p;
     }
     r->next=L->next;       
}


int king_search(linklist L,int m)  //从第m个猴子开始报数,找猴王
{
    node *q,*p=L;
    int j;
    for(j=0;j<m;j++)   //找第m个猴子的结点地址p
        p=p->next;
    while(!(p->next==p))   //找到最后一个元素
        {
        p=p->next;
        q=p->next;    //记录下将要被删除结点的地址
        p->next=q->next;  //删除第三个结点
                L->next=p->next;     //避免L没有指向  
        free(q);     //释放内存
        p=p->next;            //将p永远指向被删除结点的后一个结点  
    }
       
    return(p->num);
}

void main()
{
    int king_num;  //猴王的序号
        void Initlist(linklist L);  //声明
        void creat(linklist L,int n);
        int king_search(linklist L,int m); 
    linklist head=NULL;      //定义一个头结点
        Initlist(head);     //初始化
    int n;          //猴子的个数
    printf("enter the whole number of the monkey\n");
    scanf("%d",&n);
    creat(head,n);    //建表
    int m;
    printf("enter the number of first monkey\n");
    scanf("%d",&m);
    king_num=king_search(head,m); 
    printf("the number of monkey_king    %d\n",king_num);

}