一、思路:

先实现两个节点翻转,再实现k个节点翻转,最后实现一组一组翻转

二、C++代码:

class Solution {
public:ListNode* swap(ListNode *f1, ListNode *f2, int count) {ListNode *nowNode = f2;ListNode *f3, *l1, *l2 = NULL, *l3;while (--count > 0) {if (nowNode->next == NULL) //表明链表不足k位return NULL;else if (count == 1) {l2 = nowNode->next;l1 = nowNode;l3 = l2->next;f3 = f2->next;f2->next = l3;if (l1 == f2)l2->next = f2;else {l1->next = f2;l2->next = f3;}if (f1 != NULL)f1->next = l2;return l2;}nowNode = nowNode->next;}return l2;}ListNode *swapKNodes(ListNode *f1, ListNode *f2, int k) {ListNode *nowNode = NULL;ListNode *parent = f2;for (int i = k; i > 1; i -= 2) {if (i == k) {f2 = swap(f1, f2, i);nowNode = f2;}else {nowNode->next = swap(nowNode, nowNode->next, i);nowNode = nowNode->next;}}return f2;}ListNode* reverseKGroup(ListNode* head, int k) {if (k <= 1)return head;ListNode *nowNode = head, *f1 = NULL, *f2 = head, *l2 = NULL;int count = 0;while (nowNode != NULL) {if (count%k == k - 1) {nowNode = f2;if (count == k - 1) {head = f2 = swapKNodes(f1, f2, k);}else {f2 = swapKNodes(f1, f2, k);}f1 = f2;f1 = nowNode;}else if (count%k == 0) {f2 = nowNode;}count++;nowNode = nowNode->next;}return head;}
};

leetcode C++ 25. K 个一组翻转链表 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。相关推荐

  1. leetcode C++ 链表 24. 两两交换链表中的节点 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换

    一.思路: 在头结点前加一个哑结点,遍历,判断是否当前节点的后两个节点是否为空,为空交换一次,最后返回哑结点的next 二.C++: class Solution { public:ListNode* ...

  2. 【每日算法/刷穿 LeetCode】25. K 个一组翻转链表(困难)

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

  3. 【Java】 leetCode 删除链表中等于给定值 val 的所有节点。

    题目描述 :给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点. 返回删除后的链表的头节点. 解题思路 : 根据以上链表进行分析: 1.首先判断头节点是否为null: 2.定义一个pr ...

  4. python链表节点的插入p.next curnode_leetcode刷题总结之链表

    前言: 2020/1/14:今年过年前的任务就是回顾之前的刷过题,然后弄清以前没有弄懂的知识点,最后归纳整理形成自己的体系.因为"学而不思则罔,思而不学则殆",在比赛或者面试做题时 ...

  5. 如何删除链表的最后一个节点_面试:删除链表的节点

    给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点.返回删除后的链表的头节点.注意:此题对比原题有改动示例 1:输入: head = [4,5,1,9], val = 5 输出: [4 ...

  6. 【Java】【leetcode第25题】K 个一组翻转链表

    文章仅供自己学习记录所用,若有侵权.联系我删除! 接着来个链表题(听说字节考了) [K 个一组翻转链表] 其实这道题是206题和24题结合的一个进阶版本,我觉得关键就是控制范围(反正我自己折磨了很久, ...

  7. python链表中删除一个节点数据_python实现单链表中删除倒数第K个节点的方法

    本文实例为大家分享了python实现单链表中删除倒数第K个节点的具体代码,供大家参考,具体内容如下 题目: 给定一个链表,删除其中倒数第k个节点. 代码: class LinkedListAlgori ...

  8. 合并k个有序链表 python_leetcode第23题-合并K个有序链表

    题目: 合并 k个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例:输入: [ 1->4->5, 1->3->4, 2->6 ] 输出: 1->1- ...

  9. LeetCode 第 25 场双周赛(718/1832,前39.2%)

    文章目录 1. 比赛结果 2. 题目 1. LeetCode 5384. 拥有最多糖果的孩子 easy 2. LeetCode 5385. 改变一个整数能得到的最大差值 medium 3. LeetC ...

最新文章

  1. 预告 · Flutter Live 2018 全球同步直播
  2. 25年了,我总结出这些信息提取的经验教训
  3. Android test---robotium----简单例子
  4. CentOS-6.4无线上网命令行配置
  5. win10任务栏和开始菜单_如何将网站固定到Windows 10任务栏或开始菜单
  6. Abp + Grpc 如何实现用户会话状态传递
  7. vs2010 sp1 安装 Silverlight4_Tools 提示 错误 解决办法
  8. 基准软件测试原理,基准测试
  9. 经纬度之间的距离计算
  10. Science:把这个人类特有基因转入猴子后,它们的大脑更大更强了,但科学家没敢让它出生...
  11. Windows安装Python教程
  12. kafka怎么监听oracle,Rango_lhl:Spark+Kafka实时监控Oracle数据预警
  13. Emacs + ecb使用(Emacs必须24.3以上版本)
  14. mysql的语句大全_mysql语句大全
  15. 计算机二级是专业技术职务吗,计算机二级算中级技能证吗
  16. 王者战力接口(免费),附接口文档+小程序源码
  17. 阿里云视频点播(java)
  18. Sping AOP 源码解析(一、动态 AOP 自定义标签 aop:aspectj-autoproxy)
  19. IntelliJ IDEA 还能画思维导图,果然最强 IDE!
  20. 虚拟机无法连接到图形服务器,vmware vsphere client无法连接到服务器

热门文章

  1. script和href
  2. Redis的三种启动方式【转】
  3. C++ stringstream的用法
  4. C++ 容器 LIST VECTOR erase
  5. javascript的函数定义的区别
  6. 小结spring和struts整合的三类方式
  7. php smtp tls,php – RoundcubePostfix SMTP:SSL例程:SSL3_READ_BYTES:tlsv1 alert unknown ca:s3_pkt.c...
  8. Linux下配置汇编编译器NASM和bochs模拟器
  9. 谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词
  10. Java机器学习库ML之四模型训练和预测示例