力扣hot100--反转链表

思路1 迭代法

核心思路

  1. 双指针协作:
    pre 指向当前节点的前一个节点(初始为 null)。
    cur 指向当前处理的节点(初始为头节点 head)。
  2. 迭代过程: 保存当前节点的下一个节点 temp。
    将当前节点的 next 指针指向前一个节点 pre(反转方向)。 移动 pre 和 cur指针,继续处理下一个节点。
  3. 终止条件: 当 cur 遍历到链表末尾(null)时,pre 即为新的头节点。
java 复制代码
ListNode pre = null;// 前一个节点,初始为null
        ListNode cur = head; // 当前节点,初始为头节点

        while (cur != null) {
            // 1. 保存当前节点的下一个节点
            ListNode temp = cur.next;
            // 2. 将当前节点的next指向前一个节点(反转方向)
            cur.next = pre;
            // 3. 移动pre和cur指针
            // pre 移动到当前节点
            pre = cur;
            // cur 移动到之前保存的下一个节点
            cur = temp;
        }
        // 4. 返回新的头节点(即原链表的尾节点)
        return pre;

2.递归法


java 复制代码
 // 1. 递归终止:空链表或单节点链表
        while (head == null || head.next == null) {
            return head;
        }
        // 2. 递归反转后续节点,获取新头节点
        ListNode result = reverseList(head.next);
        // 3. 修改指针方向(核心操作)
        // 让后续节点指向当前节点
        head.next.next = head;
        // 切断当前节点的原next指向
        head.next = null;
        // 4. 返回新头节点
        return result;
相关推荐
逐步前行10 小时前
C数据结构--线性表(顺序表|单链表|双向链表)
c语言·数据结构·链表
屈冠成11 小时前
C语言数组:编辑世界的坚固桥梁
c语言·开发语言·算法
应用市场11 小时前
STM32卡尔曼滤波算法详解与实战应用
人工智能·stm32·算法
启诚科技11 小时前
树上二分(树的重心)
c++·算法·二分·树的重心
风筝在晴天搁浅12 小时前
代码随想录 617.合并二叉树
数据结构·算法
AICodeThunder12 小时前
【S组篇】C++知识点总结(1):并查集基础
c语言·数据结构·c++·算法·图论
南方的狮子先生12 小时前
【逻辑回归】从线性模型到逻辑回归
算法·机器学习·逻辑回归
闻缺陷则喜何志丹13 小时前
【排序】P9127 [USACO23FEB] Equal Sum Subarrays G|普及+
c++·算法·排序·洛谷
Code_Shark13 小时前
AtCoder Beginner Contest 424 题解
数据结构·c++·算法·数学建模·青少年编程
CS创新实验室13 小时前
深入解析快速排序(Quicksort):从原理到实践
数据结构·算法·排序算法·快速排序