点击查看代码
//Reverse a linked list using recursion
#include<iostream>
using namespace std;
struct node {
int data;
node* next;
};
node* A;//思考局部头指针如何递归
void print(node* p) {
if (p == NULL) return;//递归中止条件
cout << p->data << " ";
print(p->next);
}
void reverse(node* prev) {//递归时要用指针参数
if (prev->next == NULL) {
A = prev;
return;
}//exit condition,prev指向末节点时开始逐层返回控制权
reverse(prev->next);//先递归
node* back = prev->next;//prev往前返回,back指向其后一节点
back->next = prev;//逐层返回时back尾巴指向前一节点
prev->next = NULL;//前一节点尾巴赋空
}//往前返回不需要索引,逐层递归,未完成调用函数依次保存在stack区
void insert(int x) {
node* temp = new node;
temp->data = x;
temp->next = NULL;
if (A == NULL) {
A = temp;
}//头指针为空时要建立globle区与heap区的link才能通过头指针索引
else {
node* run = A;
while (run->next != NULL) {
run = run->next;
}
run->next = temp;
}//头指针不为空时用遍历指针索引
}
int main() {
A = NULL;
insert(2);
insert(6);
insert(5);
insert(4);
print(A); cout << endl;
reverse(A);
print(A);
}