#include#include // 求链表长度 // 定义链表类型 typedef struct Node { int data; struct Node *next; }Node,*LinkList; // 初始化 LinkList initList () { LinkList L = (Node *) malloc (sizeof(Node)); L->next = NULL; return L; } // 尾插法创建链表 LinkList createList(LinkList L) { Node *r,*s; int data; r = L; // r = L->next; // 错误,此时L是空列表;如果写成这样会被阻断 printf("请输入内容(输入-1代表结束):"); while(1) { scanf("%d",&data); if(data == -1) return 0; s = (Node *) malloc (sizeof(Node)); s->data = data; // s开辟了空间,把值给 s r->next = s; // 将 s 整体给了 r r = s; } } // 打印链表 void printList (LinkList L) { Node *p; p = L->next; while (p) { printf("%d -> ",p->data); // 使用 p->data的写法,这条语句必须在这里 p = p->next; } printf("n"); // 这里的换行是为了其他操作展示的时候另起一行 } // 计算长度 void lengthList(LinkList L) { Node *p; int len; // 计数器 p = L->next; if(!p) return; // 空链表 while (p) { len++; p = p->next; } printf("链表的长度=%d",len); } int main() { LinkList L; L = initList(); // 初始化 createList(L); // 尾插法创建 printList(L); // 打印 lengthList(L); // 计算长度 return 0; }



