力扣热门100题之反转链表

问题描述:给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

思路步骤详解:

迭代法反转链表 ,核心就是:把每个节点的 next 指针,从指向后面,改成指向前面。

  1. 先看链表长啥样

1 -> 2 -> 3 -> 4 -> 5 -> null

反转后要变成:

null <- 1 <- 2 <- 3 <- 4 <- 5

2. 三个变量到底干嘛?

代码里只有 3 个指针:

ListNode prev = null; // 前一个节点(一开始是空)

ListNode curr = head; // 当前正在处理的节点

ListNode next; // 下一个节点(临时保存用)

它们的作用:

  • prev:我要把当前节点指向它(反转方向)
  • curr:正在反转的节点
  • next:先存住下一个节点,不然一反转就找不到了

3. 循环里每一步在干嘛?(图解)

我们一步一步走:

初始状态

prev = null curr = 1 -> 2 -> 3...

第一次循环(处理节点 1)

  1. next = curr.next先把 2 存起来,不然等下就丢了

next = 2

curr.next = prev把 1 指向 null

null <- 1 2->3...

  1. prev = currprev 往前走一步,变成 1

  2. curr = nextcurr 往前走一步,变成 2

现在状态:

prev = 1 curr = 2

第二次循环(处理节点 2)

  1. next = 3
  2. 2.next = 1

null<-1<-2 3->4...

  • prev = 2
  • curr = 3

你发现规律了吗?

每一轮循环,只做一件事: 把当前节点的箭头反转,指向前一个节点。

然后两个指针一起往后挪。


最后一步

当 curr 走到 null 时:

1<-2<-3<-4<-5 (prev在这里) curr = null

循环结束,返回 prev → 它就是新的头节点!

4. 用最通俗的话总结

你可以把链表想象成一排人:

  • prev:前面的人
  • curr:你自己
  • next:后面的人

反转就是:

  1. 先记住后面的人是谁(next = curr.next)
  2. 你转身拉住前面的人(curr.next = prev)
  3. 前面的人变成你(prev = curr)
  4. 你变成后面的人(curr = next)

所有人都转一次身,链表就反转完了。

具体实现

java 复制代码
class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode prev = null;  //左指针
        ListNode curr = head;  //当前节点(初始时是头节点)
        while(curr != null){   //当前节点不为空 遍历到最后一个节点
            ListNode next = curr.next;   //把当前节点的右指针赋值给一个变量
            curr.next = prev;  //把左指针赋值给当前节点的右指针
            prev = curr;  //把当前节点赋值给左指针
            curr = next; // 把右指针赋值给当前节点
        }
        return prev;
    }
}
相关推荐
m0_547486665 天前
《数据结构教程》全套 PPT课件2026
数据结构
tryxr5 天前
矩阵的几种基础变换
java·数据结构·算法·矩阵
mmmmath_35 天前
LeetCode.028.找出字符串中第一个匹配项的
数据结构·算法·leetcode
All for pursuit.5 天前
【栈-4】739.每日温度
数据结构·c++·算法·leetcode
All for pursuit.5 天前
【栈-5】84.柱状图中最大的矩形
数据结构·c++·算法·leetcode
渡我白衣5 天前
HttpRequest与HttpResponse的实现
服务器·数据结构·c++·人工智能·tcp/ip·机器学习·caffe
晴天的雨.9925 天前
【C++算法】和为s的两个数
开发语言·数据结构·c++·算法
无敌贵点大王5 天前
RTThread学习记录11——RT-Thread 设备模型吃透:UART/ADC/PWM/PIN 到底有什么区别?
c语言·stm32·学习·链表
淡海水5 天前
13-04-面试-源码级深度追问链
数据结构·unity·面试·c#·游戏引擎·源码·il2cpp
Logic1015 天前
C语言/数据结构位运算题解:异或XOR找出时尚聚会中的“独特颜色“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质