示范程序如下:
#include"stdlib.h"
#include"stdio.h"

typedef struct LNode
   {int data;
    struct LNode *next;
    }LNode,*linklist;
 /*打印链表*/
void printflist(LNode *L)
{linklist p=L;
 printf("现在的链表为:");
 while(p->next)
{p=p->next;
printf("%d  ",p->data);}
printf("\n");}
/*初始化链表*/
void initlist(LNode *L)
{ linklist p=L,s;
s=malloc(sizeof(LNode));
printf("请输入元素的值,并以0结束:");
scanf("%d",&s->data);
s->next=NULL;
while(s->data!=0)
{  p->next=s;
   p=p->next;
   s=malloc(sizeof(LNode));
   scanf("%d",&s->data);
   s->next=NULL;}
   printflist(L);}

/*主函数*/
main()
{
linklist L;
L=malloc(sizeof(LNode));
L->next=NULL;
initlist(L);
system("pause");
}

修改后程序如下:
#include"stdlib.h"
#include"stdio.h"

typedef struct LNode
   {int data;
    struct LNode *next;
    }LNode,*linklist;
 /*打印链表*/
void printflist(LNode *L)
{
 printf("现在的链表为:");
 while(L->next)
{L=L->next;
printf("%d  ",L->data);}
printf("\n");}
/*初始化链表*/
void initlist(LNode *L)

linklist s;
s=malloc(sizeof(LNode));
printf("请输入元素的值,并以0结束:");
scanf("%d",&s->data);
s->next=NULL;
while(s->data!=0)
{  L->next=s;                         //疑问在这:为什么要多加个linklist p?
   L=L->next;
   s=malloc(sizeof(LNode));
   scanf("%d",&s->data);
   s->next=NULL;}
   printflist(L);}

/*主函数*/
main()
{
linklist L;
L=malloc(sizeof(LNode));
L->next=NULL;
initlist(L);
system("pause");
}