【算法设计题】编写算法,统计带头节点的单链表L的实际元素个数,第5题(C/C++)

目录

第5题 统计带头节点的单链表L的实际元素个数

得分点(必背)

题解:统计带头节点的单链表L的实际元素个数

代码解答

详细解释

举例说明


🌈 嗨,我是命运之光

🌌 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 = 0p = L
  • 第一次循环:p 指向 Acount = 1
  • 第二次循环:p 指向 Bcount = 2
  • 第三次循环:p 指向 Ccount = 3
  • p 指向 C 后,CnextNULL,循环结束。

最终,count 的值为 3,即链表中实际元素的个数。


嗨,我是命运之光。如果你觉得我的分享有价值,不妨通过以下方式表达你的支持:👍 点赞来表达你的喜爱,📁 关注以获取我的最新消息,💬 评论与我交流你的见解。我会继续努力,为你带来更多精彩和实用的内容。

点击这里👉 ,获取最新动态,⚡️ 让信息传递更加迅速。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

命运之光

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值