在这里,我们将看到如何使用迭代和递归方法查找链表的长度。如果给出了头指针,我们必须遵循以下步骤来获取长度。
对于迭代方法-
以列表的开头,直到当前指针不为空,再转到下一个节点并增加计数。
对于递归方法-
将head作为参数传递,基本条件是参数为null时,然后返回0,否则递归进入列表并从当前节点发送下一个节点,返回1 +子列表的长度
#include<iostream> using namespace std; class Node { public: int data; Node* next; }; void append(struct Node** start, int data) { struct Node* new_node = new Node; new_node->data = data; new_node->next = (*start); (*start) = new_node; } int count_recursive(Node* start) { if (start == NULL) return 0; return 1 + count_recursive(start->next); } int count_iterative(Node* start) { int count = 0; Node* current = start; while (current != NULL) { count++; current = current->next; } return count; } int main() { Node* start = NULL; append(&start, 1); append(&start, 3); append(&start, 1); append(&start, 2); append(&start, 1); cout << "Node count using iterative approach: " << count_iterative(start) << endl; cout << "Node count using recursion: " << count_recursive(start); }
输出结果
Node count using iterative approach: 5 Node count using recursion: 5
问题内容: 编辑:获得一些反馈后,我创建了一个新示例,该示例应更具可重复性。 我一直在用C 编写一个项目,其中涉及许多链表迭代。为了获得基准,我重写了Go中的代码。令人惊讶的是,我发现即使将-O标志传递给clang ,Go实现的运行速度也始终稳定〜10%。可能我只是缺少一些C ++的明显优化,但是我已经通过各种调整将自己的头撞墙了一段时间了。 这是一个简化的版本,在C 和Go中具有相同的实现,其中
问题内容: 如果我在java中的链表上使用了for-each循环,是否可以保证以它们在列表中出现的顺序迭代元素? 问题答案: 保证链表按顺序运行。 从文档中 有序集合(也称为序列)。该界面的用户可以精确控制列表中每个元素的插入位置。用户可以通过其整数索引(列表中的位置)访问元素,并在列表中搜索元素。 iterator() 以适当的顺序返回此列表中元素的迭代器。
本文向大家介绍在C ++的链接列表中查找峰值元素,包括了在C ++的链接列表中查找峰值元素的使用技巧和注意事项,需要的朋友参考一下 在本教程中,我们将编写一个程序,该程序在给定的链表中查找峰值元素。 峰值元素是大于周围元素的元素。让我们看看解决问题的步骤。 为链表创建一个struct节点。 用伪数据创建链接列表。 检查基本情况,例如链表是否为空或长度为1。 将第一个元素存储在一个名为previou
本文向大家介绍如何在C#中查找StringBuilder的长度?,包括了如何在C#中查找StringBuilder的长度?的使用技巧和注意事项,需要的朋友参考一下 要在C#中查找StringBuilder的长度,代码如下- 示例 输出结果 这将产生以下输出- 示例 让我们看另一个例子- 输出结果 这将产生以下输出-
我有一个具有3个属性的类: 此类的项目将添加到列表中<代码>列表 我想在列表中找到一个指定价格的对象。但大小和类型并不重要。我可以这样做吗:
上周我刚开始在工作中学习Python。我正在尝试与我们的人力资源系统集成,并使用每个API将信息上传到Okta(我们的SSO提供商)。 HR API以以下格式输出一个json文件 然后,我想将它输入到一个名为的变量中,并将其放在我的代码中: 我希望遍历Result>EmployeeId>DisplayValue并将它们打印到一个dict中,然后在代码的另一部分中遍历这些