力扣热门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;
    }
}
相关推荐
xuxie992 小时前
N15 I²C(串行通信总线)
数据结构
松小白song2 小时前
PID详解+Matlab实现
开发语言·数据结构·matlab
B1acktion3 小时前
2.3.插入排序——像打牌一样整理数组,为什么它对“几乎有序”数据特别友好?
数据结构·算法·排序算法
ComputerInBook3 小时前
OpenCV 基本数据结构
数据结构·opencv
迈巴赫车主3 小时前
蓝桥杯 19717 挖矿java
java·开发语言·数据结构·算法·职场和发展·蓝桥杯
丶小鱼丶3 小时前
数据结构和算法之【阻塞队列】下篇
java·数据结构
wangchunting3 小时前
数据结构-图
数据结构·算法
凌盛羽4 小时前
ESP32-S3定时器组Timer Group0/1的使用
stm32·单片机·嵌入式硬件·链表·esp32·定时器
6Hzlia4 小时前
【Hot 100 刷题计划】 LeetCode 239. 滑动窗口最大值 | C++ 优先队列与单调队列双解法
数据结构·算法·leetcode