力扣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;
    }
};
相关推荐
重生之我是Java开发战士7 分钟前
【贪心算法】柠檬水找零,将数组和减半的最少操作次数,最大数,摆动序列, 最长递增子序列,递增的三元子序列
算法·贪心算法
Godspeed Zhao8 分钟前
从零开始学AI17——SVM的数学支撑知识
算法·机器学习·支持向量机
我爱cope10 分钟前
【力扣hot100:53. 最大子数组和】
算法·leetcode·职场和发展
小此方13 分钟前
Re: Linux系统篇(十八)进程篇·三:深度硬核!全面起底 Linux 进程状态变化与内核链表动态解绑
linux·驱动开发·链表
凤山老林13 分钟前
63-Java LinkedList(链表)
java·开发语言·链表
Dlrb12119 小时前
C语言-指针三
c语言·算法·指针·const·命令行参数
Tisfy9 小时前
LeetCode 2540.最小公共值:双指针(O(m+n))
算法·leetcode·题解·双指针
IronMurphy9 小时前
【算法四十七】152. 乘积最大子数组
算法
淘矿人11 小时前
Claude辅助DevOps实践
java·大数据·运维·人工智能·算法·bug·devops
Cosolar11 小时前
万字详解:RAG 向量索引算法与向量数据库架构及实战
数据库·人工智能·算法·数据库架构·milvus