目录
🌈 嗨,我是命运之光!
🌌 2024,每日百字,记录时光,感谢有你,携手前行~
🚀 携手启航,我们一同深入未知的领域,挖掘潜能,让每一步成长都充满意义。
第5题 统计带头节点的单链表L的实际元素个数
编写算法,统计带头节点的单链表L的实际元素个数。
得分点(必背)
// 统计带头节点的单链表L的实际元素个数(得分点)
int listLength(LNode *L) {
int count = 0; // 计数器
LNode *p = L; // 临时指针
//从头节点的下一个结点开始遍历
while(p->next != NULL) {
count++; // 计数器加1
p = p->next; // 指针后移
}
return count;
}
题解:统计带头节点的单链表L的实际元素个数
在这个题目中,我们需要编写一个函数来统计带头节点的单链表L的实际元素个数。带头节点的单链表意味着链表的第一个节点(头节点)不存储有效数据,仅用于标记链表的起始点。因此,我们统计的是头节点之后的节点个数。
代码解答
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、函数定义和参数:
int listLength(LNode *L)
listLength
是函数名,返回值类型是int
,表示链表中元素的个数。LNode *L
是函数的参数,表示指向链表头节点的指针。
2、计数器初始化:
int count = 0;
- 定义一个整型变量
count
,初始值为0,用于记录链表中实际元素的个数。
3、定义临时指针:
LNode *p = L;
- 定义一个临时指针
p
,并让它指向链表的头节点L
。我们将使用这个指针遍历链表。
4、遍历链表:
while(p->next != NULL) {
-
while
循环用于遍历链表。条件是p->next != NULL
,即当前节点p
的下一个节点不为空。当p
的下一个节点为空时,说明我们已经遍历到链表的末尾。
5、计数器累加:
count++;
- 每遍历一个节点(除了头节点外),计数器
count
加1。
6、指针后移:
p = p->next;
- 临时指针
p
后移,指向下一个节点。这样在下一个循环中可以检查和计数下一个节点。
7、返回计数器的值:
return count;
- 当
while
循环结束时,count
的值就是链表中实际元素的个数。返回这个值。
举例说明
假设链表如下所示:
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
,即链表中实际元素的个数。
嗨,我是命运之光。如果你觉得我的分享有价值,不妨通过以下方式表达你的支持:👍 点赞来表达你的喜爱,📁 关注以获取我的最新消息,💬 评论与我交流你的见解。我会继续努力,为你带来更多精彩和实用的内容。
点击这里👉 ,获取最新动态,⚡️ 让信息传递更加迅速。