首页
首页 教程 派聪明
  • 首页
  • 教程
  • 派聪明
  • 登录
登录技术派畅享更多权益

用户名密码登录

其他登录:
icon_GitHubCreated with sketchtool.
绑定星球,畅享VIP服务

微信扫码/长按识别登录

输入验证码
有效期五分钟 👉 手动刷新

登录即同意 用户协议 和 隐私政策

绑定二哥编程星球,畅享 VIP 尊享服务!

戳我了解如何获取星球编号,新窗口打开

添加二哥微信 itwanger 审核更快

记得备注 星球编号
我会根据星球编号进行审核
1
大白话带你认识JVM
更新时间: 2024年01月16日
星球
2
JVM是如何运行Java代码的?
更新时间: 2024年01月16日
星球
3
Java的类加载机制
更新时间: 2024年01月16日
星球
4
Java的类文件结构
更新时间: 2024年01月16日
星球
5
从javap的角度轻松看懂字节码
更新时间: 2024年01月16日
星球
6
栈虚拟机与寄存器虚拟机
更新时间: 2024年01月16日
星球
7
字节码指令详解
更新时间: 2024年01月16日
星球
8
深入理解JVM的栈帧结构
更新时间: 2024年01月16日
星球
9
深入理解JVM的运行时数据区
更新时间: 2024年01月16日
星球
10
深入理解JVM的垃圾回收机制
更新时间: 2024年01月16日
星球
11
深入理解 JVM 的垃圾收集器
更新时间: 2024年01月16日
星球
12
Java 创建的对象到底放在哪?
更新时间: 2024年01月16日
星球
13
深入理解JIT(即时编译)
更新时间: 2024年01月16日
星球
14
JVM 性能监控之命令行篇
更新时间: 2024年01月16日
星球
15
JVM 性能监控之可视化篇
更新时间: 2024年01月16日
星球
16
阿里开源的 Java 诊断神器 Arthas
更新时间: 2024年01月16日
星球
17
内存溢出排查优化实战
更新时间: 2024年01月16日
星球
18
CPU 100% 排查优化实践
更新时间: 2024年01月16日
星球
19
JVM 核心知识点总结
更新时间: 2024年01月16日
星球
20
K个一组翻转链表
更新时间: 2024年02月07日
星球
关注公众号
原创
025. K 个一组翻转链表,2 张图,2 段代码,彻底掌握

鲁迅说,LeetCode 官方这道题的题目是 K 个一组翻转链表,怎么看怎么别扭,我觉得应该是 K 个一组,翻转链表 或者 翻转链表 K 个一组。缺少断句,不知道是不是我太敏感了(😂)。

题意

给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。

k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那请将最后剩余的节点保持原有顺序。

注:你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。

难度

困难

示例

输入:head = [1,2,3,4,5], k = 2
输出:[2,1,4,3,5]

k=2,反转的是

  • 1,2 → 2,1
  • 3,4 → 4,3
  • 5(只有一位了,不是 k 的整数倍,保留原样)

输入:head = [1,2,3,4,5], k = 3
输出:[3,2,1,4,5]

k=3,反转的是

  • 1,2,3 → 3,2,1
  • 4,5(只有 2 位了,不是 k 的整数倍,保留原样)

分析

由于我们刚刚解完 024.两两交换链表中的节点 这道题,所以面对本题时,虽然是 hard 难度,但并不会被它吓到。

比如说,当 k=2 时,其实就是两两交换链表中的节点,只不过,这道题,可能是两两交换,也可能是三三交换,也可能是四四交换,也可能是五五交换……

两两交换、三三交换、四四交换……这些其实就是翻转链表:给你一个有 k 个节点的链表,翻转它。

OK,我们试着来解这道题。

public ListNode reverseList(ListNode head) {
    ListNode prev = null; // 翻转链表的新头初始化为 null
    ListNode curr = head; // 当前节点设置为头节点
    while (curr != null) {
        ListNode nextTemp = curr.next; // 保存当前节点的下一个节点
        curr.next = prev; // 翻转当前节点的指向
        prev = curr; // 更新 prev 为当前节点
        curr = nextTemp; // 移动当前节点到下一个节点
    }
    return prev; // 返回翻转后的链表头
}

假设我们有一个链表:

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

目标是将其翻转为:

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

我们需要设置两个指针:prev 和 curr。

  • prev 指针初始设置为 null,因为翻转后的链表的第一个节点(原链表的最后一个节点)将指向 null。
  • curr 指针初始设置为 head,即链表的第一个节点。

我们开始遍历链表,对于链表中的每一个节点:

①、保存下一个节点:首先,我们需要保存 curr 节点的下一个节点,因为一旦我们改变 curr 的指向,就会失去访问它原来的下一个节点的方

已加入二哥编程星球,即刻绑定星球编号解锁🔐

该文档仅「二哥编程星球」的VIP用户可见

二哥的编程星球内容包括:

1. 付费文档: 技术派、MYDB 等项目配套的 120+篇教程查看权限

2. 面试指南: 校招、社招的 40 万+字面试求职攻略

3. 智能助手: 无限期使用派聪明 AI 助手,已对接讯飞星火和 ChatGPT双通道,不用花 1 分钱

4. 专属问答: 向二哥 1v1 发起提问,内容不限于 offer 选择、学习路线、职业规划等

5. 简历修改: 提供简历修改服务,附赠星球 100+优质简历模板可供参考

6. 学习环境: 打造一个沉浸式的学习环境,有一种高考冲刺、大学考研的氛围


二哥的星球

》步骤①:微信扫描上方二维码,点击「加入知识星球」按钮

》步骤②:访问星球置顶帖球友必看: https://t.zsxq.com/11rEo9Pdu,获取项目配套文档的语雀访问地址和密码

已加入星球,绑定星球编号
删除提醒

确定删除《025. K 个一组翻转链表,2 张图,2 段代码,彻底掌握》吗

3人已点赞

回复