力扣热门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;
    }
}
相关推荐
cfm_29148 小时前
Redis五大基本数据结构底层了解
数据结构·数据库·redis
如竟没有火炬8 小时前
最大矩阵——单调栈
数据结构·python·线性代数·算法·leetcode·矩阵
Lyyaoo.14 小时前
【数据结构】HashMap底层存储+扩容机制+线程安全【待更新】
数据结构·安全·哈希算法
如何原谅奋力过但无声14 小时前
【灵神高频面试题合集09-13】二叉树、二叉搜索树
数据结构·算法·leetcode
xqqxqxxq14 小时前
树结构技术学习笔记
数据结构·笔记·学习
小欣加油15 小时前
leetcode2161 根据给定数字划分数组
数据结构·c++·算法·leetcode·职场和发展
雨落在了我的手上15 小时前
Java数据结构(四):List的介绍
数据结构
大都督会赢的15 小时前
数据结构(2)--单链表
数据结构
cpp_250115 小时前
P2947 [USACO09MAR] Look Up S
数据结构·c++·算法·题解·单调栈·洛谷
小蒋学算法16 小时前
算法-乘法表中第K小的数-二分
数据结构·算法