力扣热门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;
    }
}
相关推荐
啊哦呃咦唔鱼22 分钟前
Leetcodehot100-215. 数组中的第K个最大元素
数据结构·算法·leetcode
苏渡苇28 分钟前
Redis 核心数据结构(二)——List 与消息队列
数据结构·redis·list·redis发布订阅
shehuiyuelaiyuehao37 分钟前
算法12,滑动窗口,将x减到0的最小操作数
java·数据结构·算法
6Hzlia39 分钟前
【Hot 100 刷题计划】 LeetCode 19. 删除链表的倒数第 N 个结点 | C++ 双指针单趟遍历
c++·leetcode·链表
li星野1 小时前
链表通关八题:从反转链表到两数相加,手撕LeetCode高频题
数据结构·学习·leetcode·链表
流年如夢1 小时前
顺序表 -->增、删、查、改等详细操作
c语言·数据结构
wilbertzhou1 小时前
华为4A架构中的信息架构设计方法:从数据资源到战略资产的治理之道
数据结构·togaf·企业架构·4a架构
小年糕是糕手1 小时前
【C/C++刷题集】栈、stack、队列、queue核心精讲
c语言·开发语言·数据结构·数据库·c++·算法·蓝桥杯
小年糕是糕手1 小时前
【C/C++刷题集】顺序表、vector、链表、list核心精讲
c语言·开发语言·数据结构·c++·算法·leetcode·蓝桥杯
流年如夢2 小时前
算法效率:复杂度原理解析
c语言·数据结构·算法