链表反转的三种方法详解:头插法、迭代法和递归法
创作时间:
作者:
@小白创作中心
链表反转的三种方法详解:头插法、迭代法和递归法
引用
CSDN
1.
https://blog.csdn.net/weixin_45031801/article/details/139496847
链表反转是数据结构中一个非常经典的问题,尤其在面试中频繁出现。掌握链表反转的多种方法不仅能提升编程能力,还能在面试中给面试官留下深刻印象。本文将详细讲解链表反转的三种方法:头插法、迭代法和递归法。
一、题目描述
给你单链表的头节点 head,请你反转链表,并返回反转后的链表。
二、解题方法
头插法 —— 创建新的链表
头插法的基本思路是将原链表的节点依次插入到新链表的头部。具体步骤如下:
- 定义三个变量:
cur(用于遍历原链表)、newnode(保存cur的下一个节点)和rhead(新链表的头节点)。 - 遍历原链表,将每个节点插入到新链表的头部。
- 当
cur为NULL时,表示遍历完成,此时rhead就是新链表的头节点。
struct ListNode* reverseList(struct ListNode* head)
{
// 重新创建一个链表,将之前的链表进行头插即可
struct ListNode* rphead = nullptr;
// 进行指针变换
struct ListNode* cur = head;
while(cur!=NULL)
{
// 用于保存下一个节点地址
struct ListNode* newnode = cur->next;
// 头插
cur->next = rphead;
rphead = cur;
cur = newnode;
}
return rphead;
}
迭代法 —— 三指针
迭代法不需要创建新的链表,只需要在原链表上操作即可。具体步骤如下:
- 定义三个指针:
cur(当前节点)、nextnode(cur的下一个节点)和prev(前一个节点)。 - 将
cur->next指向prev,实现链表反转。 - 更新三个指针的位置,继续迭代。
- 当
cur为NULL时,表示遍历完成,此时prev就是新链表的头节点。
class Solution {
public:
ListNode* reverseList(ListNode* head)
{
// 1. 迭代法
// 定义三个指针
ListNode* prev = nullptr; // cur 的前一个节点
ListNode* cur = head;
// 开始迭代
while(cur!=nullptr)
{
ListNode* nextnode = cur->next; // cur的下一个指针
cur->next = prev;
prev = cur;
cur = nextnode;
}
return prev;
}
};
递归法
递归法通过函数调用自身来实现链表反转。具体步骤如下:
- 定义递归函数
reverse(prev, cur),其中prev是已反转部分的头节点,cur是当前待反转的节点。 - 递归结束条件是
cur为NULL,此时返回prev。 - 在每次递归中,将
cur->next指向prev,然后调用reverse(cur, newnode)继续递归。
class Solution {
public:
ListNode* reverse(ListNode* prev, ListNode* cur)
{
// 最终结束条件
if(cur==nullptr)
{
return prev;
}
ListNode* newnode =cur->next;
cur->next = prev;
// 将 cur 作为 prev 传入下一层
// 将 newnode 作为 cur 传入下一层,改变其指针指向当前 cur
return reverse(cur,newnode);
}
ListNode* reverseList(ListNode* head)
{
// 3. 递归法
return reverse(nullptr,head);
}
};
三、总结与提炼
链表反转是面试中常见的算法题,掌握多种解法有助于在面试中脱颖而出。建议读者通过画图和实际编码加深理解,熟练掌握这三种方法。
热门推荐
三叶青图片大赏:功效揭秘与正确使用指南
泰娱顶流小花Bella官宣恋情,男友是富四代,两人相识如同偶像剧
谷家兴:40年从警路,42本笔记凝结警务智慧
冬游川西三日攻略:本地人带你避开坑,玩转四姑娘山和藏寨
纯音乐冥想:释放压力,寻找内心的宁静
三星堆文物修复有“黑科技”:AI助力神树“重生”,600件珍品首亮相
三星堆出土396厘米青铜神树,展现古蜀宇宙观
苹果手机录音技巧全攻略:内置应用+第三方工具,轻松提升效率
苏秦:从游说失败到掌控六国相印的传奇人生
正视职场失败:从分析到改进的完整指南
新华网启动《中国宴》美食IP,以纪录片展现三大宴系文化
上海发布“快处易赔”车险理赔服务指引,轻微事故处理更便捷
轻微人伤事故处理指南:从现场处置到保险理赔
配音演员需要具备哪些技能和素质?
日本股市暴跌4200点:全球化依赖下的经济脆弱性暴露
“针、推、药”结合 “防、治、康”一体
融合了城市灵魂的公共艺术装置设计,美得让人移不开眼睛!
新年寄语撰写指南:从传统到创新,让祝福更有温度
小学数学计算能力怎么提高?过来人分享心得!
三尊佛头被盗,盗贼接连遭厄运
四门塔佛头被盗25年终回归,两岸合作续写文物保护佳话
梵高与浮世绘:一场跨时空的艺术对话
浮世绘元素爆火,现代设计的新宠儿?
浮世绘如何点燃梵高的艺术火花?
浮世绘艺术展,揭秘梵高莫奈灵感来源
常德出发,5天玩转贵州:瀑布、古镇、苗寨全打卡
道家辟谷秘籍:水煮白菜清肠法
1000元起玩转常德到贵阳:自助游预算规划指南
常德至贵州8天游:两种路线畅游湖湘黔贵美景
安徽水煮白菜的最佳搭档——宣城火腿