反转链表的算法实现与原理详解
创作时间:
作者:
@小白创作中心
反转链表的算法实现与原理详解
引用
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,即实现链表反转
热门推荐
Hi青浦|换个角度,带你领略元荡之美
"一带一路"上的中外人文交流
美国学校的历史沿革与发展
全马成绩=半马用时乘以2?对照这个表预估你的全马能跑到多少
如何舒缓肩颈疼痛?专家分享有效方法与建议!
PC端究竟是什么意思?
水务系统安全阀定期检测:从必要性到实施建议
城市骑行通勤:技巧、装备、环保与安全全指南
系统架构设计高级技能:层次式架构设计理论与实践
孩子腹胀是什么原因引起的
气泡砖与红砖对比:装修选材指南
芦荟:特性、益处和完整用途
企业投资项目核准和备案管理办法的具体流程是什么?
南京大学连续第四年扩大新工科本科人才培养规模
如何正确地道歉?
晶粒钙钛矿薄膜助力智能眼镜系统构建
C语言如何使用浮点数
探寻藏族文化的瑰宝——酥油茶的奥秘与传说
电动车轮胎规格及型号对照表
什么是实木多层板?结构特点、优点及应用领域全解析
覆车之戒 | 跟车太紧易“受伤”,保持安全车距很重要!
高速行车 避免这些“致命”行为!
如何制定有效的活动预算及ROI分析计划?
13篇论文!新奥球形环氢硼热核反应平台物理设计最新成果在《PST》专刊发表
肩关节MRI解剖肩袖损伤诊断技巧--对应动图
铅酸电池与锂电池:安全性能与成本效益的深度剖析
提升社交魅力:有效增加“淘气值”的实用方法与建议
麻醉监测中的红外光谱技术应用
饲料厂仓库如何管理
如何在金融操作中灵活应对各种情况?这些应对方法存在哪些挑战?