对于不带头节点的单列表l,设计一个递归算法,逆序输出所有的结点值
时间: 2024-09-24 14:15:06 浏览: 60
要设计一个递归算法来逆序输出一个无头节点的单链表(也称为顺序表)中的所有元素,你需要定义一个辅助函数,该函数接收当前节点以及前一个节点作为参数。每次递归调用时,我们将当前节点的值输出,然后继续处理它的下一个节点,直到遍历到链表的末尾。
这里是一个简单的C++实现:
```cpp
#include <iostream>
// 定义链表节点结构体
struct Node {
int data; // 存储数据的字段
Node* next; // 指向下个节点的指针
};
// 辅助函数,用于递归逆序打印
void printReverse(Node* node, Node* prev = nullptr) {
if (node == nullptr) { // 基线条件:到达链表末尾
return;
} else {
// 递归调用,先输出当前节点,再处理下一个节点
std::cout << node->data << " "; // 输出当前节点值
printReverse(node->next, node); // 将prev指向当前节点,然后传入下一个节点
}
}
// 示例链表创建函数(为了演示)
Node* createLinkedList(int arr[], int size) {
Node* head = new Node();
Node* current = head;
for (int i = 0; i < size; ++i) {
current->data = arr[i];
current->next = new Node();
current = current->next;
}
return head;
}
int main() {
int arr[] = {1, 2, 3, 4, 5}; // 假设我们有一个这样的数组
int size = sizeof(arr) / sizeof(arr[0]);
Node* listHead = createLinkedList(arr, size);
std::cout << "Original list: ";
printReverse(listHead); // 正常打印链表
std::cout << "\nReversed list: ";
printReverse(listHead, nullptr); // 逆序打印链表
delete listHead; // 别忘了释放内存
return 0;
}
```
当你运行这段代码时,它首先按照正常顺序打印链表,然后调用`printReverse`函数并传入`nullptr`作为前一个节点,实现链表的逆序输出。
阅读全文