LeetCode–第25题K个一组翻转链表

题目描述

解决方案–C语言

主体是用递归的办法。递归三要素:
1、向上返回什么:一个处理好的子链表
2、返回条件是什么:要么是处于好了子链表,要么是因长度小于K而不用调整导致直接返回。
3、每层递归干什么事情:要调整一组K个节点的反转,而且题目要求 是动节点,而不是动节点内的val值。
重点讲怎么干:令p=head。首先我们定义一个大小为K+1的ListNode*array[k+1]数组,1~K用来装一组K个节点,下标0用来装第K个结点的->next那个节点。。见图一。在装的过程中如果发现p=NULL了说明此次递归处理的链表长度不够K个了,所以要直接返回。return一下即可。
然后下一步。我们把数组里的K个节点反向调头,即做翻转工作。见图一。

上面的工作做完之后,我们要思考 ,如何让每次递归的子链表连续上。1,2,3处理完了,下面就可以让4,5,6,7去处理了,所以下一次递归就是reverseKGroup(4即array[0],k)去。那么这里的调用,就是连接两次递归处理的关键。从过程可以看出,array[1]永远都是当次递归处理的最后一个节点,那么他就担起了连接工作。即代码:array[1]->next = reverseKGroup(array[0],3).
我们还需要将head指针指向处理完后的第一个结点,即array[k]。
最后,我们要将本次的处理结果返回 return head.
这样第一次递归的array[1]->next 就会指向第二次递归的array[k]。结束。
上代码:

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/struct ListNode* reverseKGroup(struct ListNode* head, int k){struct ListNode *p=head;struct ListNode *array[k+1];int i=1;while(i<=k){if(p==NULL) return head;array[i++]=p;p=p->next;    }p=head;array[0]=array[k]->next;i=k;while(i>0){array[i]->next=array[i-1];i--;}head=array[k];array[1]->next=reverseKGroup(array[0],k);return head;
}

结果如下:


第一次在csdn上写自己的题解。说的不对、不清楚的地方请多指教。谢谢。

LeetCode--第25题K个一组翻转链表相关推荐

  1. [Leedcode][JAVA][第25题][K个一组反转链表][链表][递归]

    [问题描述][第25题][K个一组反转链表][困难] 时间复杂度:O(N^2) 空间复杂度:O(1) ```java 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表.k 是一个正整数, ...

  2. leetcode算法题--K 个一组翻转链表

    原题链接:https://leetcode-cn.com/problems/reverse-nodes-in-k-group/ ListNode* reverseList(ListNode* head ...

  3. 力扣【25】K个一组翻转链表(字节跳动面试题)

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

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

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

  5. 25. K 个一组翻转链表

    25. K 个一组翻转链表 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表. k 是一个正整数,它的值小于或等于链表的长度. 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持 ...

  6. 由力扣K 个一组翻转链表到360原创题

    前段时间帮对象做360笔试题时,遇到一个没怎么想明白的编程题,直到今天刷力扣遇到了相似的k个一组翻转链表后,想着在做一下那天的编程题,就想着记录一下遇到的难点. 力扣题如下图所示: 360原创题如下: ...

  7. Leetcode-递归/反转链表模板-25. K 个一组翻转链表

    题目25. K 个一组翻转链表: 题解: 模拟 以K个为一组,进行常规反转,重点是要保留反转前的头节点,以及第K+1个节点,将其反转之后连接起来 代码: /*** Definition for sin ...

  8. 链表经典题:K个一组翻转链表

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

  9. 20200329:K 个一组翻转链表(leetcode25)

    K 个一组翻转链表 题目 思路与算法 代码实现 复杂度分析 题目 思路与算法 注意题目里的常数的额外空间的要求,意味着不可以使用栈之类的数据结构. 这道链表题实际就是上一道的进阶版,指定每k个进行翻转 ...

最新文章

  1. 配置中心Apollo的设计原理
  2. javaScript年份下拉列表框内容为当前年份及前后50年
  3. Winform中在FastReport的PreviewControl预览控件中对report控件模板中控件值进行修改
  4. array_multisort - 如何保持键值,不重置键值,键名保持不变
  5. List VS Set
  6. java学习(25):三目运算符
  7. monkey自动化测试移动app 操作指南——真机 安卓(Android)app测试
  8. LCD1602(以51单片机为例)
  9. lisp语言与python_5种语言混合编程:C++、JS、python、Lisp、汇编
  10. 集合类和JAVA多线程
  11. 短视频完美开源源码 后台+APP双端源码
  12. 由于改 UOM conversion 导致库存数量和财务上的数据错误
  13. VMware Workstation16设置共享文件夹
  14. 永洪BI SQL带参数查询
  15. 思科前员工为报复恶意删除400多台虚拟机,公司损失超1600万
  16. 一个大专生从8K到13K的挫折经历
  17. MongoDB + PostgreSQL中文社区 南京技术大会
  18. shell启动脚本示例
  19. 关于罗技鼠标options的安装流程和黑屏解决详细流程
  20. 为什么虚拟现实视频看上去那么粗糙?

热门文章

  1. 搭建mysql注入_常见的sql注入环境搭建
  2. 青春、情动、永恒的经典——岩井俊二
  3. 失败魔咒下的企业海外并购(ZT)
  4. 基于ERP的WMS系统解决方案
  5. ios代码中的内存泄露,内存检测工具leaks 检测不出来
  6. ubuntu系统开机显示BusyBox v1.22.1(Ubuntu 1:1.22.0-15ubuntu1) built-in shell(ash) 问题的解决办法
  7. java破解WIFI
  8. Spring 让 LOB 数据操作变得简单易行
  9. ICMAX解析无线路由器WAN口应该怎么设置
  10. 在Illustrator和手绘文章中创建矢量图形