/*求表长*/
#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("请输入第一个结点的值:\n");
int firstNum = 0;
scanf("%d", &firstNum);
first_node->data = firstNum;
first_node->next = NULL;
phead = first_node;//头指针指向第一个节点
//尾插入初始化赋值
printf("输入若干个值保存到链表中:\n");
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\n", 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("\n");
}
//求链表的表长
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("初始化链表为:\n");
showLink(myhead);
printf("表的长度是:%d\n", getLinkLength(myhead));
}
![]()