/*求表长*/ #include<stdio.h> #include<stdlib.h> //链表中节点的结构 typedef struct Link { int data; struct Link* next; }link; //链表初始化 link* initLink(link* phead) { link* first_node = (link*)malloc(sizeof(link));//创建第一个节点 //第一个结点先初始化 printf("请输入第一个结点的值: "); int firstNum = 0; scanf("%d", &firstNum); first_node->data = firstNum; first_node->next = NULL; phead = first_node;//头指针指向第一个节点 //尾插入初始化赋值 printf("输入若干个值保存到链表中: "); int num = 0; while (num != -1) { //-1代表结束 scanf("%d", &num); link* new_node = (link*)malloc(sizeof(link)); //申请新的结点 new_node->data = num; new_node->next = NULL; first_node->next = new_node; //第一个结点的指针域指向这个新申请的结点 first_node = new_node; //第一个结点后移 } printf("头指针指向的值是:%d ", phead->data);//1 return phead; //将指向第一个结点的头指针返回 } void showLink(link* phead) { link* tmp = phead; while (tmp != NULL) { if (tmp->data == -1) { break; } printf("%d ", tmp->data); tmp = tmp->next; } printf(" "); } //求链表的表长 int getLinkLength(link* phead) { link* tmp = phead; int len = 0; while (tmp != NULL) { if (tmp->data == -1) { break; } len++; tmp = tmp->next; } return len; } void main() { link* myhead = NULL; //创建头指针 myhead = initLink(myhead); //获得经过初始化后的头指针 printf("初始化链表为: "); showLink(myhead); printf("表的长度是:%d ", getLinkLength(myhead)); }