#include <stdio.h>
#include <stdlib.h>
typedef struct LNode *Node;  //定义指向LNode类型的指针Node
struct LNode {  //定义节点
    int data;  //存放数据
    Node next;  //指向下一指针
};
typedef NodeList;
List init(){
int d;  //存放从控制台输入的数值
LNode *q;  //定义指针q  
List L=(List)malloc(sizeof(LNode));  //向系统申请分配指定LNode个字节的内存空间
    L->Next=NULL;  //尾指针设为空
while((scanf("%d", &d))!=‘-1‘){  //等待用户输入(-1用于程序终止)
q=(LNode*)malloc(sizeof(LNode));  //继续开辟内存空间
q->data=d;  //向节点中data赋值
q->Next=L->Next;  //指向下一个节点
L->Next=q;  //指向新开辟的节点
}
return L;
}
int ListLength( List L ){
int j=0;
LNode *p;
p=L->Next;
while(p!=NULL)
{
p=p->Next;
j++;
}
return j;
}
int main()
{
    List L = init();
    printf("%d\n", ListLength(L));
    return 0;
}
原文:https://www.cnblogs.com/treeing/p/10168009.html