反转链表的算法实现与原理详解
创作时间:
作者:
@小白创作中心
反转链表的算法实现与原理详解
引用
CSDN
1.
https://m.blog.csdn.net/qq_50093188/article/details/145388020
题目
反转链表
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
示例 1:
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
示例 2:
输入:head = [1,2]
输出:[2,1]
示例 3:
输入:head = []
输出:[]
提示:
链表中节点的数目范围是 [0, 5000]
-5000 <= Node.val <= 5000
进阶:链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题?
代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* reverseList(ListNode* head) {
if(!head)//若头结点为空,直接返回头结点
{
return head;
}
ListNode* pre=NULL;//采用双指针方法
ListNode* cur=head;
while(cur)//cur为空结束循环
{
ListNode* tmp=cur->next;//cur的下一个结点,保存方便后续使用
cur->next=pre;//将cur的结点的next指向pre(相当于往前指)
pre=cur;//pre后移,即将cur赋给pre
cur=tmp;//cur后移,即将tmp(就是cur的后一个结点)赋给cur
}
return pre;
}
};
原理图
原理图借鉴哔站华南溜达虎,如有侵权联系删除。
原理讲解
思想:使用双指针方法
指针变量:将pre指向空指针,cur指向头结点,tmp指向cur后一个结点。
流程:
1、若头结点为空直接返回头结点。
2、若头结点不为空,将pre指向空指针,cur指向头结点。
3、在循环体中,声明一个tmp(即cur后一个的结点)用来存储cur后一个结点的地址,将cur指向的结点指向pre,然后pre与cur分别向后移,将cur的指向给pre,将cur的指向改为tmp。
4、重复步骤3,直至cur的指向为空
5、返回pre,即实现链表反转
热门推荐
学会「隐写术」,能过简历能作弊,还能 PUA 大模型
西晋短命而亡的深刻教训
PT、NPT、G、ZG、M几种螺纹的区别
外泌体电镜样品制备方法详解:突破纳米世界的关键技术
湖南湘潭:从"忧居"到"优居" "四步疗法"焕新颜
《山海经》里的七大上古大神,你知道几个?
Windows系统中罗技驱动无法打开?六种实用解决方案帮你轻松应对
韭菜籽的功效与作用有哪些
一人犯罪影响三代?这些考公政审的谣言,是时候该被戳破了
金苔鼠:被误解的“工具鱼”
推拿多久一次合适
应采儿的“硬核”家规引热议,现在的小孩还用得上家规?
“湘西赶尸”真的存在吗?揭秘古老传说中的真相
网购直发膏,美发不成反脱发!医生提醒→
如何管理团队性格
喜马拉雅山愈长愈高 近9万年长高或达50米
知识也要学会极简,看看比尔盖茨2024推荐的8本书
经常不由自主的吞咽口水口水也没有分泌过多
心理咨询:亲人离世,如何度过丧失痛苦期?
俄罗斯都有哪些节日放假
挑核桃可别只看大小!学会这些小窍门,保准你挑到果肉饱满、好吃的核桃!
空开上的C63、6000A到底啥意思?一文让你看懂
什么是三方协议
如何为开源项目撰写有效的文档
碘伏的作用与禁忌 碘伏使用方法与注意事项
山西永济:一日深度游必览美景与地道美食盘点
一场关于“抗衰”的温柔革命
【动画结合】一文读懂扁平足病因、康复治疗、注意事项
使用解压软件解决手机微信接收压缩文件无法打开的问题
印度老山檀简述