链表反转的三种方法详解:头插法、迭代法和递归法
创作时间:
作者:
@小白创作中心
链表反转的三种方法详解:头插法、迭代法和递归法
引用
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);
}
};
三、总结与提炼
链表反转是面试中常见的算法题,掌握多种解法有助于在面试中脱颖而出。建议读者通过画图和实际编码加深理解,熟练掌握这三种方法。
热门推荐
防腐储罐内部用什么材料好?
【咖啡】外行陪你读《世界咖啡学》03期:低咖啡因品种
怎样在银行办理转账汇款手续费最低?
里约热内卢历史爱好者指南
什么时候去里约热内卢
房贷先息后本提前还款划算吗?
关于糖耐量试验(OGTT)和胰岛素、C肽释放试验的解读
负性心尖搏动是什么意思?可能有哪些症状和治疗方法?
犀利评测|当灯火褪去,四川眉山“东坡印象水街”只剩寂寞
空乘人员的职业礼仪
神话:地藏王菩萨坐骑--谛听
三款开胃健脾消积食的汤水,简单易行效果好
怎么用excel做参数估计
芯片测试的流程主要有哪些?
辣子鸡丁——把鸡丁炒嫩是中式炒菜的入门捷径
桂林几月份去最好?探索最佳旅游时节的绝美风光
告别体重焦虑:数字不是美好体态的唯一标准
怎样写出有深度有水平的好文章?16个技巧让你的作品更有内涵
党员民主测评,怎样测得准评得实
CSGO网络连接疑难杂症全方位破解:从理解到解决,一步到位
锁存器的工作原理及其在FPGA设计中的注意事项
数字电路中的竞争与冒险问题详解
同步时序逻辑电路的设计方法与实例解析
如何安全撕下汽车玻璃膜?这些撕膜步骤有哪些注意事项?
汽车玻璃膜怎么取下来?如何顺利取下汽车玻璃膜?取下汽车玻璃膜时要注意什么?
如何撰写完美的产品计划书:从市场分析到实施方案
西安出发自驾游线路推荐:甘南川西北小环线6天行程攻略
骆驼股份:铅价与废旧电池回收价高度正相关 公司2024年受铅价波动影响相对有限
白蛇故事的演变
长期吃塑料袋装的食物,对人体有害吗?会致癌吗?