力扣热门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;
    }
}
相关推荐
小江的记录本36 分钟前
【Java基础】泛型:泛型擦除、通配符、上下界限定(附《思维导图》+《面试高频考点清单》)
java·数据结构·后端·mysql·spring·面试·职场和发展
落羽的落羽2 小时前
【算法札记】练习 | Week4
linux·服务器·数据结构·c++·人工智能·算法·动态规划
萑澈3 小时前
算法竞赛入门:C++ STL核心用法与时空复杂度速查手册
数据结构·c++·算法·stl
yuannl104 小时前
数据结构----二叉排序树(ai修改版)
数据结构
iiiiyu4 小时前
集合进阶(Map集合)
java·大数据·开发语言·数据结构·编程语言
小江的记录本5 小时前
【Java基础】核心关键字:final、static、volatile、synchronized、transient(附《思维导图》+《面试高频考点清单》)
java·前端·数据结构·后端·ai·面试·ai编程
go不是csgo6 小时前
两个Redis数据结构搞定签到和UV统计:Bitmap与HyperLogLog实战
数据结构·redis·uv
悠仁さん6 小时前
数据结构 栈与队
数据结构
Plan-C-7 小时前
二叉树的遍历
java·数据结构·算法
历程里程碑7 小时前
54 深入解析poll多路复用技术
java·linux·服务器·开发语言·前端·数据结构·c++