25. K 个一组翻转链表

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

k 是一个正整数,它的值小于或等于链表的长度。

如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。

示例:

给你这个链表:1->2->3->4->5

当 k = 2 时,应当返回: 2->1->4->3->5

当 k = 3 时,应当返回: 3->2->1->4->5

说明:

你的算法只能使用常数的额外空间。
你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。


25. Reverse Nodes in k-Group

Given a linked list, reverse the nodes of a linked list k at a time and return its modified list.

k is a positive integer and is less than or equal to the length of the linked list. If the number of nodes is not a multiple of k then left-out nodes in the end should remain as it is.

Example:

Given this linked list: 1->2->3->4->5

For k = 2, you should return: 2->1->4->3->5

For k = 3, you should return: 3->2->1->4->5

Note:

Only constant extra memory is allowed.
You may not alter the values in the list's nodes, only nodes itself may be changed.

解题思路

1.分组反转链表操作
2.边界处理

代码

class Solution {fun reverseKGroup(head: ListNode?, k: Int): ListNode? {if (head?.next == null) {return head}// 找到tail的地址var tail = headfor (i in 0..(k - 1)) {// 当这一组链表节点数小于k,直接返回if (tail == null) {return head}// 指针逐一后移,一直移到k-1位置=tailtail = tail.next}// 反转该组var newHead = reverse(head, tail)// head.next = 下一组的 newHeadhead.next = reverseKGroup(tail, k)// 返回当前组的newHeadreturn newHead}fun reverse(head: ListNode?, tail: ListNode?): ListNode? {var cur = head// cur prevar pre: ListNode? = null// cur nextvar next: ListNode?// cur->cur.nextwhile (cur != tail) {// next持有cur的next节点next = cur?.next// 反转cur节点的next为precur?.next = pre// 指针向后移到下一个节点pre = curcur = next}// 返回newHeadreturn pre}}class ListNode(var value: Int) {var next: ListNode? = nulloverride fun toString(): String {return "ListNode(value=$value, next=$next)"}
}

测试函数:

fun main() {run {val listNode1 = ListNode(1)val listNode2 = ListNode(2)val listNode3 = ListNode(3)val listNode4 = ListNode(4)val listNode5 = ListNode(5)listNode1.next = listNode2listNode2.next = listNode3listNode3.next = listNode4listNode4.next = listNode5listNode5.next = nullval ans = reverseKGroup(listNode1, 2)println(ans)}run {val listNode1 = ListNode(1)val listNode2 = ListNode(2)val listNode3 = ListNode(3)val listNode4 = ListNode(4)val listNode5 = ListNode(5)listNode1.next = listNode2listNode2.next = listNode3listNode3.next = listNode4listNode4.next = listNode5listNode5.next = nullval ans = reverseKGroup(listNode1, 3)println(ans)}}

输出:

ListNode(value=2, next=ListNode(value=1, next=ListNode(value=4, next=ListNode(value=3, next=ListNode(value=5, next=null)))))
ListNode(value=3, next=ListNode(value=2, next=ListNode(value=1, next=ListNode(value=4, next=ListNode(value=5, next=null)))))

相似的题型

反转链表

Reverse a singly linked list.
Example:

Input: 1->2->3->4->5->NULL
Output: 5->4->3->2->1->NULL
Follow up:

A linked list can be reversed either iteratively or recursively. Could you implement both?
https://leetcode-cn.com/explore/interview/card/bytedance/244/linked-list-and-tree/1038/

源代码:

/*** Example:* var li = ListNode(5)* var v = li.`val`* Definition for singly-linked list.* class ListNode(var `val`: Int) {*     var next: ListNode? = null* }*/
class Solution {fun reverseList(head: ListNode?): ListNode? {var cur = headvar pre:ListNode? = nullvar next:ListNode? = nullwhile(cur!=null){next = cur.nextcur.next = prepre = curcur = next}return pre}
}

参考资料

https://leetcode-cn.com/problems/reverse-nodes-in-k-group/
https://leetcode-cn.com/submissions/detail/67275479/


Kotlin开发者社区

专注分享 Java、 Kotlin、Spring/Spring Boot、MySQL、redis、neo4j、NoSQL、Android、JavaScript、React、Node、函数式编程、编程思想、"高可用,高性能,高实时"大型分布式系统架构设计主题。

High availability, high performance, high real-time large-scale distributed system architecture design

分布式框架:Zookeeper、分布式中间件框架等
分布式存储:GridFS、FastDFS、TFS、MemCache、redis等
分布式数据库:Cobar、tddl、Amoeba、Mycat
云计算、大数据、AI算法
虚拟化、云原生技术
分布式计算框架:MapReduce、Hadoop、Storm、Flink等
分布式通信机制:Dubbo、RPC调用、共享远程数据、消息队列等
消息队列MQ:Kafka、MetaQ,RocketMQ
怎样打造高可用系统:基于硬件、软件中间件、系统架构等一些典型方案的实现:HAProxy、基于Corosync+Pacemaker的高可用集群套件中间件系统
Mycat架构分布式演进
大数据Join背后的难题:数据、网络、内存和计算能力的矛盾和调和
Java分布式系统中的高性能难题:AIO,NIO,Netty还是自己开发框架?
高性能事件派发机制:线程池模型、Disruptor模型等等。。。

合抱之木,生于毫末;九层之台,起于垒土;千里之行,始于足下。不积跬步,无以至千里;不积小流,无以成江河。


http://www.taodudu.cc/news/show-4649258.html

相关文章:

  • Load balancer 负载均衡
  • 【K8s超级补丁】KLTS攻略:KLTS现有成果、如何使用、RoadMap规划,如何参与到KLTS项目贡献中来
  • 论文阅读笔记:(2022) Delving into the Devils of Bird‘s-eye-view Perception: A Review, Evaluation and Recipe
  • 视频讲解|KLTS -- K8s 长期维护支持版本
  • 【项目】danmu punish启动
  • 纯虚函数应用
  • Stream流体系
  • 声明英雄类攻击水晶
  • 高校学籍管理系统 SQL Servre 数据库系统
  • erlang send剖析及参数意义
  • NLP模型(二)——GloVe实现
  • 初学Stream流
  • 厉害了,我用python精确画出了北京五环
  • Guava Futures异步回调机制源码解析
  • Docker及其使用思维导图
  • OPPO大数据离线计算平台架构演进
  • 2020 试卷中的生词(05)
  • 常用软件点评(1)------系统必备软件篇
  • WINDOWS的常用软件点评(1)------系统必备软件篇
  • 系统必备软件篇
  • 常用软件点评
  • 常用软件------系统必备软件
  • 木木的常用软件点评(1)------系统必备软件篇
  • 【复习资料】心田花开:人教版二年级语文《父亲和鸟》知识点归纳总结
  • php公众号提现功能,微信公众号打赏的钱怎么提现_微信公众号打赏功能_微信公众号打赏从哪里取出来...
  • 微信公众号文章增加评论功能
  • 赋能新零售,Stratifyd亮相Smart Retail智慧零售年度峰会
  • Smart Share:抓住每一个机会,让数据释放无限可能
  • git clone公司项目的代码到本地
  • 大学生静态HTML网页设计--公司官网首页

K 个一组翻转链表(递归,Kotlin)相关推荐

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

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

  2. LeetCode--第25题K个一组翻转链表

    LeetCode–第25题K个一组翻转链表 题目描述 解决方案–C语言 主体是用递归的办法.递归三要素: 1.向上返回什么:一个处理好的子链表 2.返回条件是什么:要么是处于好了子链表,要么是因长度小 ...

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

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

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

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

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

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

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

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

  7. 哔哩哔哩2020校园招聘 - K个一组翻转链表 一年中的第几天

    1.K个一组翻转链表 题目描述: 给你一个链表,每 k 个节点一组进行翻转,请返回翻转后的链表. 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序. 示例 : 给定这个链表:1-&g ...

  8. 清晰易懂的“K个一组翻转链表”解法

    题目来源:Leetcode K个一组翻转链表 一.题目 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表. k 是一个正整数,它的值小于或等于链表的长度. 如果节点总数不是 k 的整数倍 ...

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

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

最新文章

  1. 从《翔谈》说起,看美团
  2. 七天入门linux,一个Linux新手的七天
  3. 计算机系统 cpu课程,计算机操作系统
  4. Vue源码:指令和生命周期
  5. 三菱plc编程软件怎么用c语言,各种三菱PLC编程软件的用途介绍
  6. php 同义词词库,php实现SEO伪原创同义词替换函数
  7. C语言题目:数字金字塔(有条件的老师同学点一下赞呀)
  8. “城市大脑”治城一年 杭州“变”了
  9. 2022年第十三届蓝桥杯大赛软件类决赛C/C++大学B组(国赛)题解
  10. DDR学习笔记---DDR3基本知识
  11. 2020年3月31日 生活思考 ~ 子贡论时
  12. 模型学习01——评价类模型(3)
  13. ewebeditor文件上传漏洞2.8.0版本(漏洞复现)
  14. 未来计算机的四大新技术是什么,汪成为院士:未来计算机技术发展四大动力
  15. MyBatis:注解简化一对一关系
  16. 防火墙的发展史及技术应用
  17. 批量分析京东详细物流情况,并筛选拒收的单号
  18. 国外的有名嵌入式网站收集
  19. jQuery 节流阀/链式编程 /插件
  20. 清华大学计算机科学博导,冯建华(清华大学计算机科学与技术系教授)

热门文章

  1. 孤独真的能毁掉一个人吗?
  2. 学生表(Student)、课程表(Course)、成绩表(Score)以及教师信息表(Teacher)...
  3. (十五):常用的十种算法(下)
  4. 医院主要支付方式及其风险分析
  5. bmap地图api删除路线
  6. 【SQL Server系列】_01数据库系统概述
  7. 五次面试,程序员的悲催轮回
  8. python目录是什么意思_python是什么(python是什么意思)
  9. 一个显示器分屏显示两个画面_测了两个爆款游戏显示器,结果我发现他们都有坑。...
  10. keil 调用 nop警告 174-Dexpression has no effect