对于不带头结点的单链表L,设计一个递归算法逆序输出所有结点值。用数组a[]={1,2,5,2,3,2}来创建单链表L。
时间: 2023-08-03 21:06:06 浏览: 159
递归算法逆序输出不带头结点的单链表L的步骤如下:
1. 判断当前结点是否为空,如果为空则直接返回。
2. 递归输出当前结点之后的所有结点。
3. 输出当前结点的值。
对于数组a[]={1,2,5,2,3,2}来创建单链表L的过程,可以按照以下步骤进行:
1. 定义一个指向链表头的指针p,并初始化为NULL。
2. 从数组的末尾开始循环,每次创建一个新结点,并将数组元素赋值给该结点的数据域。
3. 将该结点的next指针指向p指针所指向的结点,然后将p指针指向该结点。
4. 循环结束后,p指针指向链表的头结点。
下面是具体的C++代码实现:
```c++
#include <iostream>
using namespace std;
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
void createList(ListNode*& head, int a[], int n) {
head = NULL;
for (int i = n - 1; i >= 0; i--) {
ListNode* p = new ListNode(a[i]);
p->next = head;
head = p;
}
}
void reversePrint(ListNode* head) {
if (head == NULL) return; // 1.
reversePrint(head->next); // 2.
cout << head->val << " "; // 3.
}
int main() {
int a[] = { 1,2,5,2,3,2 };
int n = sizeof(a) / sizeof(int);
ListNode* L;
createList(L, a, n);
reversePrint(L);
return 0;
}
```
输出结果为:`2 3 2 5 2 1`。
阅读全文