数据结构单链表之查找链表的长度(迭代和递归) | 第七套

简介: 数据结构单链表之查找链表的长度(迭代和递归) | 第七套

编写一个函数来计算给定单链表中的节点数。

例如,对于链表 1->3->1->2->1,函数应该返回 5。

迭代解决方案

1) 初始化计数为 0 
2) 初始化一个节点指针,current = head。
3) 在 current 不为 NULL 时执行以下操作
     a) current = current -> next 
     b) count++; 
4) 返回计数

以下是上述算法的迭代实现,用于查找给定单链表中的节点数。

// 递归 C++ 程序,用于查找链表中节点的长度或计数
#include <bits/stdc++.h>
using namespace std;
/* Link list node */
class Node {
public:
  int data;
  Node* next;
};
/*给定一个指向头部的引用(指向指针的指针)
一个列表和一个整数,在前面推一个新节点
的名单。*/
void push(Node** head_ref, int new_data)
{
  /* 分配节点 */
  Node* new_node = new Node();
  /* 放入数据 */
  new_node->data = new_data;
  /* 将旧列表从新节点链接起来 */
  new_node->next = (*head_ref);
  /*移动头部指向新节点*/
  (*head_ref) = new_node;
}
/* 递归计算链表中的节点数 */
int getCount(Node* head)
{
  // 基本情况
  if (head == NULL) {
    return 0;
  }
  // 计算这个节点加上列表的其余部分
  else {
    return 1 + getCount(head->next);
  }
}
/* 测试计数功能的驱动程序*/
int main()
{
  /* 从空列表开始 */
  Node* head = NULL;
  /* 使用 push() 构造下面的列表 1->2->1->3->1 */
  push(&head, 1);
  push(&head, 3);
  push(&head, 1);
  push(&head, 2);
  push(&head, 1);
  /* 检查计数功能 */
  cout << "节点数为 " << getCount(head);
  return 0;
}

输出:

节点数为 5


目录
相关文章
|
11天前
|
算法 程序员 索引
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
栈的基本概念、应用场景以及如何使用数组和单链表模拟栈,并展示了如何利用栈和中缀表达式实现一个综合计算器。
16 1
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
|
6天前
|
存储
[数据结构] -- 单链表
[数据结构] -- 单链表
16 1
|
13天前
|
存储 Java
数据结构第三篇【链表的相关知识点一及在线OJ习题】
数据结构第三篇【链表的相关知识点一及在线OJ习题】
21 7
|
11天前
|
算法 搜索推荐 Shell
数据结构与算法学习十二:希尔排序、快速排序(递归、好理解)、归并排序(递归、难理解)
这篇文章介绍了希尔排序、快速排序和归并排序三种排序算法的基本概念、实现思路、代码实现及其测试结果。
13 1
|
13天前
|
存储 安全 Java
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
18 3
|
11天前
|
算法 Java
数据结构与算法学习五:双链表的增、删、改、查
双链表的增、删、改、查操作及其Java实现,并通过实例演示了双向链表的优势和应用。
10 0
数据结构与算法学习五:双链表的增、删、改、查
|
5天前
|
存储
[数据结构] -- 双向循环链表
[数据结构] -- 双向循环链表
12 0
|
5天前
|
存储
数据结构(单链表)
数据结构(单链表)
7 0
|
11天前
|
存储
探索数据结构:便捷的双向链表
探索数据结构:便捷的双向链表
|
11天前
|
存储
探索数据结构:单链表的实践和应用
探索数据结构:单链表的实践和应用