leecode25 K个一组翻转链表

LeetCode题解:25.K个一组翻转链表【Python题解超详细,站辅助法、递归法】,知识拓展:常见的翻转链表操作 LeetCode题解:25.K个一组翻转链表【Python题解超详细,站辅助法、递归法】,知识拓展:常见的翻转链表操作,迭代法、递归法、栈法。 K个一组翻转链表:给你链表的头节点head,每k个节点一组进行翻转,请你返回修改后的链表。k是一个正整数,它的值小于或等于链表的长度。如果节点总数不是k的整数倍,那么请将最后剩余的节点保持原有顺序。 阅读详情

在这里插入图片描述

我的思路

这个题目是((20250817112352-w8vn3te ‘0092 反转链表II’)) 的延申题目,虽然难度上是困难,但实际上并不是很难。
本质上我们还可以用第92题的方法来解决这个题目。

我的思路主要分为三步

  1. 确定每一组的前一个和后一个元素

    for(int i =0;i<=k;i++){
        if(last==null){
            flag = true;
            break; //不够k个。
        }
        last = last.next;
    }
    不够k个则保持原有顺序,结束循环
    if(flag) break;
    
  2. 翻转链表部分
    这里相比92题也做了一部分的修改,我多加入了一个变量,用于记录这k个元素的最开始的元素,当翻转结束之后,这个元素成为这k个元素的最后一个元素,同时也是下一组的前一个pre元素。

    ListNode pre = last;
    ListNode cur = p0.next;
    ListNode temp = p0.next;
    while(cur!=last){
        ListNode nxt = cur.next;
        cur.next = pre; // 每次循环只修改一个 next,方便大家理解
        pre = cur;
        cur = nxt;
    }
    p0.next = pre;
    
  3. 更新下一组的pre和last

    //更新下一轮的p0和last;
    p0 = temp;
    last = temp;
    

总代码为:

public ListNode reverseKGroup(ListNode head, int k) {
    ListNode dummy = new ListNode(0,head);
    ListNode p0 = dummy;
    ListNode last  = dummy;
    boolean flag = false;
    //从第一组开始遍历,然后主键的找k次,进行遍历而已
    while(true){
        //确定每一轮的前一个和后一个元素
        for(int i =0;i<=k;i++){
            if(last==null){
                flag = true;
                break; //不够k个。
            }
            last = last.next;
        }

        //不够k个保持原有顺序
        if(flag) break;

        //翻转链表
        ListNode pre = last;
        ListNode cur = p0.next;
        ListNode temp = p0.next;
        while(cur!=last){
            ListNode nxt = cur.next;
            cur.next = pre; // 每次循环只修改一个 next,方便大家理解
            pre = cur;
            cur = nxt;
        }
        p0.next = pre;

        //更新下一轮的p0和last;
        p0 = temp;
        last = temp;
    }
    return dummy.next;
}

灵神的思路

灵神的话,首先统计了这个节点的个数,然后利用这个节点的个数进行遍历循环。和我的主要区别在于,他并没有找这个last节点。本质上我和灵神的思路差不多,毕竟就是跟着他学的。

class Solution {
    public ListNode reverseKGroup(ListNode head, int k) {
        // 统计节点个数
        int n = 0;
        for (ListNode cur = head; cur != null; cur = cur.next) {
            n++;
        }

        ListNode dummy = new ListNode(0, head);
        ListNode p0 = dummy;
        ListNode pre = null;
        ListNode cur = head;

        // k 个一组处理
        for (; n >= k; n -= k) {
            for (int i = 0; i < k; i++) { // 同 92 题
                ListNode nxt = cur.next;
                cur.next = pre; // 每次循环只修改一个 next,方便大家理解
                pre = cur;
                cur = nxt;
            }

            // 见视频
            ListNode nxt = p0.next;
            p0.next.next = cur;
            p0.next = pre;
            p0 = nxt;
        }
        return dummy.next;
    }
}

作者:灵茶山艾府
链接:https://leetcode.cn/problems/reverse-nodes-in-k-group/solutions/1992228/you-xie-cuo-liao-yi-ge-shi-pin-jiang-tou-plfs/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
leetcode25 K个一组翻转链表 题解 有一个重要的点,就是大家要维护好整个链表的第一个节点,因为虽然题目给出了第一个节点的指针,但是在我们的骚操作之后,这个指针就会发生变化。我的操作是新建一个新的节点,然后让这个节点的 next 来保存第一个节点的信息,最后我们就只要返回这个节点的 next 就行了。假设用五个点表示链表的一部分,其中中间三个点是一组的,我们的第一步就是让他们内部的指向正确,具体的步骤是这样的,我们用三个指针 tmp、tmp1、tmp2 一步一步的完成操作。最后就是这样的了,中间的三个节点翻转,而且不影响其他的点。 阅读详情

相关推荐

Tera Term介绍和使用指南

Tera Term 是一个用于 Windows 操作系统的免费终端模拟器和串口通信软件。它主要用于在计算机和其他设备之间建立串口通信连接,例如通过串行线缆连接到设备如路由器、开发板或嵌入式系统。Tera Term 支持多种通信协议和功能,包括 Telnet、SSH 和串口通信。提供了一个终端窗口,模拟了常见的终端类型,如VT100。支持通过串口与设备进行通信,可用于与嵌入式系统、微控制器等设备进行连接。提供 Telnet 和 SSH 功能,可用于通过网络连接到远程主机。

weixin_49423593的博客 1万+

leecode25 k个一组翻转链表

题目: 给你一个链表,每k个节点一组进行反转,请你返回反转后的链表。 k是一个正整数,它的值小于或等于链表的长度。 如果节点总数不是k的整数倍,那么请将最后剩余的节点保持原有顺序。 示例: 给定这个链表:1->2->3->4->5 当 k = 2 时,应当返回: 2->1->4->3->5 当 k = 3 时,应当返回: 3->2->...

weixin_43763859的博客 178

eDP、DP与HDMI——现代显示接口的核心解析

eDP、DP和HDMI各有千秋:eDP以嵌入式设备的低功耗见长,DP凭借开放生态和高带宽成为专业领域首选,而HDMI则依靠庞大的消费电子生态稳居家庭市场。未来,随着Type-C接口的普及和超高清内容的爆发,三者的技术边界可能进一步融合,但各自的核心优势仍将长期共存。对于用户而言,选择接口需基于设备需求——游戏玩家青睐HDMI的VRR,设计师依赖DP的多屏扩展,而轻薄本则离不开eDP的紧凑设计。

麟的博客 8411

Leecode 25. K 个一组翻转链表

题目描述: 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。 k 是一个正整数,它的值小于或等于链表的长度。 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 示例: 给你这个链表:1->2->3->4->5 当 k = 2 时,应当返回: 2->1->4->3->5 当 k = 3 时,应当返回: 3->2...

子冉冰清的博客 351

手把手教你用STM32的SPI驱动MCP2517FD实现CAN FD通信(附完整代码)

本文详细介绍了如何使用STM32通过SPI驱动MCP2517FD实现CAN FD通信,涵盖硬件连接、SPI驱动编写、寄存器配置及数据收发实战。提供完整代码示例和常见问题排查指南,帮助开发者快速构建高可靠性的CAN FD通信系统,适用于汽车电子和工业控制等领域。

weixin_30607029的博客 674

达梦数据库集群部署(主备)

达梦数据库集群部署(主备)

m0_71845127的博客 1461

Leecode刷题之路第25天之K个一组翻转链表

代码示例:(Java)代码示例:(Java)

工一木子 778

泛微ecology9 利用字段值动态控制明细表显示与隐藏

本文详细介绍了在泛微ecology9中,如何利用WfForm.bindFieldChangeEvent监听字段变化,结合jQuery动态控制明细表显示与隐藏的实战方法。通过五步操作,可实现根据字段值(如报销类型)智能切换明细表,提升表单交互体验与开发效率,并确保PC与移动端完美兼容。

7z8x2c4v6b9的博客 585

go语言LeeCode刷题记:25. K 个一组翻转链表

25. K 个一组翻转链表 给你一个链表,每k个节点一组进行翻转,请你返回翻转后的链表。 k是一个正整数,它的值小于或等于链表的长度。 如果节点总数不是k的整数倍,那么请将最后剩余的节点保持原有顺序。 示例: 给你这个链表:1->2->3->4->5 当k= 2 时,应当返回: 2->1->4->3->5 当k= 3 时,应当返回: 3->2->1->4->5 来源:力扣(LeetCode) 链接:ht...

Duan_YZ的博客 243

单细胞实战之亚细胞分群从T/NK至CD4+T细胞——从入门到进阶(中级篇1)

亚细胞分群从T/NK至CD4+T细胞

zfyyzhys的博客 6389

浙政钉(专有钉钉)门户免登(超详细)

钉钉家族 介绍浙政钉门户免登之前,首先搞清楚几个软件的关系,软件分别是:钉钉,专有钉钉,浙政钉 钉钉 是阿里巴巴集团专为中小企业打造的沟通和协同的多端平台。 专有钉钉 原名 政务钉钉,有更开放的设计能力、集成能力、更结构化协同产品、更定制化开发平台。支持专有化部署,数据落本地,更安全、客户可对该产品持牌运营、结构化编排,协助构建本地应用中心、提供移动应用全面安全保障体系。 浙政钉 为规范浙政钉整体架构体系,按照统分结合原则,由省政府办公厅统一设计整体工作界面和系统框架,统筹指导全省统建应用建设,各单

一缕南风的博客 2万+

LeeCode25. K 个一组翻转链表——完整步骤拆解(含注释)

本文介绍了如何实现K个一组翻转单链表的算法。首先解析了问题要求,即每连续K个节点为一组进行翻转,不足K个则保持原序。接着讲解了单链表翻转的迭代法和递归法两种基础方法。核心思路是将问题拆分为分组、翻转和连接三个步骤,通过虚拟头节点简化边界处理。给出了完整的Java代码实现,并分析了时间复杂度为O(n)和空间复杂度为O(1)。最后讨论了k=1、链表长度为k的整数倍等边界情况。该算法通过实际交换节点完成翻转,适用于各种链表长度和分组规模。

863

2026年OPPO嵌入式岗位面试题带详细答案

本文总结了OPPO嵌入式岗位面试的核心考点,涵盖硬件驱动、系统启动、Linux内核开发等7大模块共34道典型题目。重点解析了SPI通信协议、中断处理、U-Boot启动流程、Linux驱动开发等关键技术,突出硬件调试与工程实践能力考核。题目设置贴合实际岗位需求,适合校招与社招驱动开发岗位应聘者系统复习,帮助掌握嵌入式开发的核心知识与面试要点。

Open 489

Leecode-25. K 个一组翻转链表(Leecode-24进阶,通俗易懂,详细)

题目描述(Leecode-24进阶) 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。 k 是一个正整数,它的值小于或等于链表的长度。 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 示例: 给你这个链表:1->2->3->4->5 当 k = 2 时,应当返回: 2->1->4->3->5 当 k = 3 时,应当返回: 3->2->1->4->5 说明: 你的算法只能使用常数的额外空间。 你不能

ProGramming_Mk的博客 305

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

leecode-25-K个一组翻转链表

/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * }.

hmyqwe的博客 149

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

leecode-C语言实现-25. K 个一组翻转链表

例如: 链表为:1 -> 2 -> 3 -> 4 -> 5。 步长为:3TmpPoint:来记录当前的链表位置。 PreviousPoint:来记录上一个数组索引位为0的链表地址。 NextPoint:记录当前数组索引位为2的元素链接的下一个链表地址。 TmpArray:初始化一个长度为3的数组,里面存储链表中元素的指针。TmpPoint:&1 PreviousPoint:NULL NextPoint:NULL TmpArray:{&1,null,null}TmpPoint:&2 PreviousPoint

qq_45111959的博客 490

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

LeetCode 25.k个一组翻转链表——Python实现

1、官方给的一种解法,很直观,就是指针太多,很容易绕晕 class Solution: def reverseKGroup(self, head: ListNode, k: int) -> ListNode: def reverseList(head_node, tail_node): new_tail_node = head_node visited_head = None while head_

u011412768的博客 420

Java实现 LeetCode 25 K个一组翻转链表

25. K 个一组翻转链表 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。 k 是一个正整数,它的值小于或等于链表的长度。 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 示例 : 给定这个链表:1->2->3->4->5 当 k = 2 时,应当返回: 2->1->4->3->5 当 k = 3 时,应当返回...

南 墙 1万+

Leetcode 25. K 个一组翻转链表

25. K 个一组翻转链表 - 力扣(LeetCode)

2301_80097874的博客 1179

【LeetCode刷题记录】92. 反转链表 II & 25. K 个一组翻转链表

两题都是反转链表,放在一起整理。图解来自B站视频讲解:[反转链表](强推!!!

C_greenbird的博客 1765

LeetCode 25:K 个一组翻转链表

给定链表头节点head和整数k,要求k,不足k个的节点保持原序。k。

m0_75126572的博客 1204

LeetCode 25. K 个一组翻转链表

1. 题目 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。 k 是一个正整数,它的值小于或等于链表的长度。 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 示例 : 给定这个链表:1->2->3->4->5 当 k = 2 时,应当返回: 2->1->4->3->5 当 k = 3 时,应当返回: 3->...

Michael是个半路程序员 2658

力扣——25 K个一组翻转链表

是一个正整数,它的值小于或等于链表的长度。你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。25. K 个一组翻转链表 - 力扣(LeetCode)的整数倍,那么请将最后剩余的节点保持原有顺序。个节点一组进行翻转,请你返回修改后的链表。

2301_77433167的博客 1067
上一篇: Transformer模型实战基础入门
下一篇: leecode445 两数相加II
TranquilGlow
博客等级 码龄5年 132粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值