当前位置:网站首页>反转链表-递归反转法
反转链表-递归反转法
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;
}
输出结果:
边栏推荐
- 基于多目标两阶段随机规划方法的电热联合系统调度
- 听到'演员工作比工人辛苦,吃得也不如工人好?'我笑了
- 基于时延估计的扰动卡尔曼滤波器外力估计
- 物联网技术概论:第6章
- 【ASP.NET Core】选项类的依赖注入
- Current relay JL-8GB/11/AC220V
- Bagging-Blending Multi-Model Fusion Short-Term Electricity Load Forecasting Based on Weighted Grey Correlation Projection
- 真正懂经营管理的CIO具备哪些特质
- Verilog语法基础HDL Bits训练 07
- ORA-00600 [13013], [5001], [268] 问题分析及恢复
猜你喜欢
Difference between C# enumeration type and xaml
向上管理读书笔记
Typroa alternative tool marktext
C语言 — 位运算操作
编译Hudi
360闷声干大事获赞无数,数字安全如何保障?还得看企业安全云
基于MySQL数据库,Redis缓存,MQ消息中间件,ES搜索引擎的高可用方案解析
STM32F1 reads MLX90632 non-contact infrared temperature sensor
优酷VIP会员周卡只需7.5元,看《沉香如屑》用优酷视频
基于.NetCore开发博客项目 StarBlog - (16) 一些新功能 (监控/统计/配置/初始化)
随机推荐
Differences between lock spin and mutex usage scenarios
ADC0808/9 signal acquisition developed by single chip microcomputer
TensorFlow自定义训练函数
C语言 — 位运算操作
定制.NET 6.0的依赖注入
明德扬FPGA开发板XILINX-K7核心板Kintex7 XC7K325 410T工业级
pg_rewind 修复主备环境的时间线
Log4j有哪几种日志级别呢?
Voltage relay HDY - vac - 1 A / 1-220
C language - bitwise operations
我又造了个轮子:GrpcGateway
360闷声干大事获赞无数,数字安全如何保障?还得看企业安全云
Meituan internal push + school recruitment written test + summary of knowledge points
又爆神作!阿里爆款MySQL高级宝典开源,直抵P7
Typroa 替代工具marktext
Interviewer: Redis bloom filter and the cuckoo in the filter, how much do you know?
The battle-hardened programmer was also deceived by a fake programmer from a certain fish. The trust between programmers should be the highest, and he alone destroyed this sense of trust
京东校招笔试题+知识点总结
Explain the problem of change exchange in simple terms - the shell of the backpack problem
Verilog语法基础HDL Bits训练 08