【力扣链表篇】206.反转链表

题目:

给你单链表的头节点 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

解答:

  • 需要三个指针,pre,cur,temp。目的是pre指向NULL,cur指向头节点,temp临时存储cur的next。
  • 每当cur指向pre完成两个节点之间的反转后,就需要pre指向cur的位置,cur指向temp的位置,temp在存储新的cur的next。
  • 三个指针始终连续,直到cur为NULL时,代表没有要反转的节点了。
cpp 复制代码
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode* temp;//临时存储cur的next的
        ListNode* pre = NULL;
        ListNode* cur = head;
        while(cur){//当cur指向空的时,已经反转完毕,不再进入循环
            temp = cur->next;//当cur的next指向前一个节点完成反转时,cur的next找不到原来的下一个节点了,所以临时存储一下
            //例如:1-》2-》3-》变成了 1《-2-》3 时1的next不在是2,而是NULL,所以temp临时存储一下,为了后续cur能移动下一个节点,继续反转
            cur->next = pre;//反转
            pre = cur;
            cur = temp;
        }
        return pre;
    }
};
相关推荐
一起养小猫1 分钟前
Flutter for OpenHarmony 进阶:表达式解析算法与计算器核心实现
算法·flutter·harmonyos
池央7 分钟前
贪心-最长递增子序列
算法·贪心算法
We་ct11 分钟前
LeetCode 383. 赎金信:解题思路+代码解析+优化实战
前端·算法·leetcode·typescript
不懒不懒22 分钟前
【逻辑回归从原理到实战:正则化、参数调优与过拟合处理】
人工智能·算法·机器学习
一只大袋鼠23 分钟前
分布式 ID 生成:雪花算法原理、实现与 MyBatis-Plus 实战
分布式·算法·mybatis
tobias.b26 分钟前
408真题解析-2010-27-操作系统-同步互斥/Peterson算法
算法·计算机考研·408真题解析
寄存器漫游者35 分钟前
数据结构 二叉树核心概念与特性
数据结构·算法
m0_7066532338 分钟前
跨语言调用C++接口
开发语言·c++·算法
皮皮哎哟41 分钟前
数据结构:从队列到二叉树基础解析
c语言·数据结构·算法·二叉树·队列
一匹电信狗1 小时前
【高阶数据结构】并查集
c语言·数据结构·c++·算法·leetcode·排序算法·visual studio