力扣HOT100之链表:206. 反转链表

这道题今天已经是第三次刷了,思路都知道但是代码就是写不对,我真的要红温了🤯🤯

以后这道题就统一用双指针法来做吧。

双指针,顾名思义,就是用两个指针来保存一些必要的变量,对于一段链表,我们要将其反转,我们必须知道这段链表的前置节点,当前遍历到的节点和当前节点的下一节点,我们分别用precurrenttemp来表示,如图所示

从上面到下面经历了一次反转,可以看到,在一次反转中,我们仅将current指向了原本的前置节点pre,然后将precurrenttemp的位置整体后移一位,然后周而复始,我们通过一个while循环来实现这样的处理流程,直到head == nullptr退出循环,此时pre指向原链表的最后一个元素,此时pre节点也是反转后的链表的首元素,因此我们直接返回pre指针即可。

cpp 复制代码
/**
 * 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) {
        //双指针法
        ListNode* pre = nullptr;  
        ListNode* temp;
        while(head){
            temp = head -> next;  //先保存head的下一个节点
            head -> next = pre;   //将head指向原链表的前置节点
            pre = head;
            head = temp;
        }
        return pre;
    }
};
相关推荐
大佬,救命!!!2 小时前
算法实现迭代2_堆排序
数据结构·python·算法·学习笔记·堆排序
Dream it possible!2 小时前
LeetCode 面试经典 150_栈_简化路径(53_71_C++_中等)(栈+stringstream)
c++·leetcode·面试·
程序员阿鹏2 小时前
49.字母异位词分组
java·开发语言·leetcode
天桥下的卖艺者2 小时前
R语言手搓一个计算生存分析C指数(C-index)的函数算法
c语言·算法·r语言
Espresso Macchiato2 小时前
Leetcode 3715. Sum of Perfect Square Ancestors
算法·leetcode·职场和发展·leetcode hard·树的遍历·leetcode 3715·leetcode周赛471
草莓熊Lotso3 小时前
《C++ Stack 与 Queue 完全使用指南:基础操作 + 经典场景 + 实战习题》
开发语言·c++·算法
敲上瘾3 小时前
单序列和双序列问题——动态规划
c++·算法·动态规划
太过平凡的小蚂蚁3 小时前
策略模式:让算法选择像点菜一样简单
算法·策略模式
时间醉酒3 小时前
数据结构基石:单链表的全面实现、操作详解与顺序表对比
数据结构·链表
科研小白_6 小时前
基于遗传算法优化BP神经网络(GA-BP)的数据时序预测
人工智能·算法·回归