Reverse a linked list using recursion【1月17日学习笔记】

点击查看代码
//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);
}
posted @   bituion  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示