第5题 统计带头节点的单链表L的实际元素个数
编写算法,统计带头节点的单链表L的实际元素个数。
得分点(必背)
代码语言:javascript复制// 统计带头节点的单链表L的实际元素个数(得分点)
int listLength(LNode *L) {
int count = 0; // 计数器
LNode *p = L; // 临时指针
//从头节点的下一个结点开始遍历
while(p->next != NULL) {
count ; // 计数器加1
p = p->next; // 指针后移
}
return count;
}题解:统计带头节点的单链表L的实际元素个数
在这个题目中,我们需要编写一个函数来统计带头节点的单链表L的实际元素个数。带头节点的单链表意味着链表的第一个节点(头节点)不存储有效数据,仅用于标记链表的起始点。因此,我们统计的是头节点之后的节点个数。
代码解答
代码语言:javascript复制int listLength(LNode *L) {
int count = 0; // 计数器,初始化为0
LNode *p = L; // 临时指针p,指向链表的头节点L
// 从头节点的下一个结点开始遍历
while(p->next != NULL) {
count ; // 每遍历一个节点,计数器加1
p = p->next; // 临时指针后移,指向下一个节点
}
return count; // 返回计数器的值,即链表中实际元素的个数
}详细解释
1、函数定义和参数:
代码语言:javascript复制int listLength(LNode *L)listLength是函数名,返回值类型是int,表示链表中元素的个数。LNode *L是函数的参数,表示指向链表头节点的指针。
2、计数器初始化:
代码语言:javascript复制int count = 0;- 定义一个整型变量
count,初始值为0,用于记录链表中实际元素的个数。
3、定义临时指针:
代码语言:javascript复制LNode *p = L;- 定义一个临时指针
p,并让它指向链表的头节点L。我们将使用这个指针遍历链表。
4、遍历链表:
代码语言:javascript复制while(p->next != NULL) {-
while循环用于遍历链表。条件是p->next != NULL,即当前节点p的下一个节点不为空。当p的下一个节点为空时,说明我们已经遍历到链表的末尾。
5、计数器累加:
代码语言:javascript复制count ;- 每遍历一个节点(除了头节点外),计数器
count加1。
6、指针后移:
代码语言:javascript复制p = p->next;- 临时指针
p后移,指向下一个节点。这样在下一个循环中可以检查和计数下一个节点。
7、返回计数器的值:
代码语言:javascript复制return count;- 当
while循环结束时,count的值就是链表中实际元素的个数。返回这个值。
举例说明
假设链表如下所示:
代码语言:javascript复制L -> A -> B -> C -> NULL其中,L 是头节点,A, B, C 是实际存储数据的节点。
- 初始时,
count = 0,p = L - 第一次循环:
p指向A,count = 1 - 第二次循环:
p指向B,count = 2 - 第三次循环:
p指向C,count = 3 p指向C后,C的next为NULL,循环结束。
最终,count 的值为 3,即链表中实际元素的个数。


