【力扣链表篇】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;
    }
};
相关推荐
CS创新实验室7 分钟前
《计算机网络》深入学:海明距离与海明码
计算机网络·算法·海明距离·海明编码
WW_千谷山4_sch9 分钟前
MYOJ_10599:CSP初赛题单10:计算机网络
c++·计算机网络·算法
YuTaoShao29 分钟前
【LeetCode 每日一题】1458. 两个子序列的最大点积——(解法三)状态压缩
算法·leetcode·职场和发展
位东风37 分钟前
希尔排序(Shell Sort)详解
算法·排序算法
AI科技星1 小时前
光速飞行器动力学方程的第一性原理推导、验证与范式革命
数据结构·人工智能·线性代数·算法·机器学习·概率论
橘颂TA1 小时前
【剑斩OFFER】算法的暴力美学——leetCode 946 题:验证栈序列
c++·算法·leetcode·职场和发展·结构与算法
闻缺陷则喜何志丹1 小时前
【状态机动态规划】3686. 稳定子序列的数量|1969
c++·算法·动态规划·力扣·状态机动态规划
寻星探路1 小时前
【算法通关】双指针技巧深度解析:从基础到巅峰(Java 最优解)
java·开发语言·人工智能·python·算法·ai·指针
wen__xvn1 小时前
力扣第 484 场周赛
算法·leetcode·职场和发展