当前位置:网站首页>反转链表-递归反转法
反转链表-递归反转法
2022-07-30 11:23:00 【代码骑士】
(1)思想:和迭代反转法的思想恰好相反,递归反转法的实现思想是从链表的尾节点开始,依次向前遍历,遍历过程依次改变各节点的指向,即另其指向前一个节点。
(2)实现(建议先看代码,再看图解,使理解更加深刻):
开始递归:
new_head经过三次函数递归的调用来到了链表的最后一个结点,因为new_head=head->next,所以head始终保持在new_head的前一个结点处。

递归到最后一层时:

开始逐层出递归:



递归结束。
最后的结果为:
代码片段:
link* recursive_reverse(link* head) {
//出递归条件
if (head == NULL || head->next == NULL)
{
return head;
}
else
{
//new_head一直找到链表中的最后一个元素的地址
link *new_head = recursive_reverse(head->next);
//出递归后,将链表
head->next->next = head;
head->next = NULL;
return new_head;
}
}完整代码:
#include<stdio.h>
#include<stdlib.h>
typedef struct Link{
int elem;
struct Link* next;
}link;
link* initLink(){
int i;
//定义头指针
link* head=NULL;
//定义首元结点
link* temp=(link*)malloc(sizeof(link));
//首元结点初始化
temp->elem=1;
temp->next=NULL;
head=temp;
//创建其他结点
for(i=2;i<5;i++){
link* a=(link*)malloc(sizeof(link));
a->elem=i;
a->next=NULL;
temp->next=a;
temp=temp->next;
}
//返回头指针的地址
return head;
}
void printLink(link* head){
link* p=head;
while(p){
printf("%d ",p->elem);
p=p->next;
}
printf("\n");
}
link* recursive_reverse(link* head) {
//出递归条件
if (head == NULL || head->next == NULL)
{
return head;
}
else
{
//new_head一直找到链表中的最后一个元素的地址
link *new_head = recursive_reverse(head->next);
//出递归后,将链表
head->next->next = head;
head->next = NULL;
return new_head;
}
}
int main()
{
link*p=initLink();
printf("原始链表:");
printLink(p);
printf("反转链表:");
p=recursive_reverse(p);
printLink(p);
return 0;
}
输出结果:

边栏推荐
- 面试官:Redis中的布隆过滤器与布谷鸟过滤器,你了解多少?
- 向上管理读书笔记
- salesforce使用方法(salesforce authenticator下载)
- [Cloud-Building Co-creation] Huawei Cloud and Hongmeng collaborate to cultivate innovative developers
- STM32F1读取MLX90632非接触式红外温度传感器
- 360闷声干大事获赞无数,数字安全如何保障?还得看企业安全云
- 基于MySQL数据库,Redis缓存,MQ消息中间件,ES搜索引擎的高可用方案解析
- pg_rewind 修复主备环境的时间线
- NLP领域的最新研究进展
- 【ASP.NET Core】选项类的依赖注入
猜你喜欢

Beyond Stream Processing!The 4th real-time computing Flink challenge is launched, and 490,000 prizes are waiting for you!

高手云集、丰富活动,斩获佳绩,超过2万名开发者参与的AI社团邀你加入!

Typroa 替代工具marktext

The package of idea is not hollow

MySQL——数据库基础

又爆神作!阿里爆款MySQL高级宝典开源,直抵P7

电压继电器HDY-A/1-220VAC-1

Current relay JL-8GB/11/AC220V

High energy output!Tencent's internal MyCat middleware manual, both theoretical and practical

2022-07-29 顾宇佳 学习笔记 异常处理
随机推荐
Based on the analysis of the acoustic channel cable tunnel positioning technology
Native js create table
Kubernetes 入门实战03 中级篇
听到'演员工作比工人辛苦,吃得也不如工人好?'我笑了
Swift 常用扩展类和简单封装
SQL language and paging rownum analysis in Oracle
decodeURIComponent()、eval()、encodeURIComponent()
Bagging-Blending Multi-Model Fusion Short-Term Electricity Load Forecasting Based on Weighted Grey Correlation Projection
Taobao/Tmall taobao comments q&a list interface API
简述controller,service,repository注解的用法(谈谈application.properties的作用)
C语言 — 位运算操作
RY-D1/1 Voltage Relay
湖仓一体电商项目(一):项目背景和架构介绍
获取1688app上原数据 API
【ASP.NET Core】选项类的依赖注入
I built another wheel: GrpcGateway
Vim plugin GrepIt
电流继电器JL-8GB/11/AC220V
decodeURIComponent(), eval(), encodeURIComponent()
spin lock和mutex使用场景的差异