【力扣链表篇】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;
    }
};
相关推荐
AI小白的Python之路1 小时前
数据结构与算法-排序
数据结构·算法·排序算法
DashVector1 小时前
如何通过Java SDK检索Doc
后端·算法·架构
zzz9331 小时前
transformer实战——mask
算法
一只鱼^_2 小时前
牛客周赛 Round 105
数据结构·c++·算法·均值算法·逻辑回归·动态规划·启发式算法
是阿建吖!2 小时前
【动态规划】斐波那契数列模型
算法·动态规划
啊阿狸不会拉杆2 小时前
《算法导论》第 27 章 - 多线程算法
java·jvm·c++·算法·图论
火车叨位去19492 小时前
力扣top100(day04-05)--堆
算法·leetcode·职场和发展
数据智能老司机2 小时前
面向企业的图学习扩展——面向图的传统机器学习
算法·机器学习
类球状3 小时前
顺序表 —— OJ题
算法
Miraitowa_cheems3 小时前
LeetCode算法日记 - Day 11: 寻找峰值、山脉数组的峰顶索引
java·算法·leetcode