当前位置:网站首页>反转链表-递归反转法
反转链表-递归反转法
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;
}
输出结果:

边栏推荐
- feign远程调用时如何在请求头加入数据
- Static LED display developed by single chip microcomputer
- The package of idea is not hollow
- 又爆神作!阿里爆款MySQL高级宝典开源,直抵P7
- 流水线上的农民:我在工厂种蔬菜
- 淘宝/天猫淘宝评论问答列表接口 API
- UE5 GAS Study Notes Postscript 0
- xshell使用技巧(赚分享平台怎么样)
- STM32F1 reads MLX90632 non-contact infrared temperature sensor
- Detailed explanation of @RequestBody and @ResponseBody
猜你喜欢
随机推荐
HJY-F931A/YJ三相电压继电器
向上管理读书笔记
Get the original data API on 1688app
基于MySQL数据库,Redis缓存,MQ消息中间件,ES搜索引擎的高可用方案解析
Underwater target detection method based on spatial feature selection
原生js 创建表格
流水线上的农民:我在工厂种蔬菜
久经沙场的程序员居然也被某鱼的假程序员骗了,程序员之间的信任应该是最高的,他一个人毁了这种信任感
Swift common extension classes and simple encapsulation
【梦想起航】
重写并自定义依赖的原生的Bean方法
LeetCode_236_二叉树的最近公共祖先
还在用Swagger?我推荐这款零代码侵入的接口管理神器
PanGu-Coder: 函数级的代码生成模型
C language - bitwise operations
Manage reading notes upward
明德扬FPGA开发板XILINX-K7核心板Kintex7 XC7K325 410T工业级
《跟唐老师学习云网络》 - 问题定位 - 主机通但容器不通
Is it too late to apply for PMP now to take the September exam?Share agile full-true mock questions
UE5 GAS 学习笔记 后记0









