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

2024-08-09 12:37:19 浏览数 (1)

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

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

0 人点赞