当前位置: 首页 > news >正文

萱仔求职复习系列——力扣

25. K 个一组翻转链表

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

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

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

我认为其实还是某一种反转链表,只不过变成一部分反转了,可以用递归来解决这个问题:

递归结束条件:当剩下的节点少于 k 个时,保持原有顺序,不再翻转。

递归处理:每次递归处理 k 个节点,翻转它们,然后将翻转后的部分与递归处理的剩余部分连接起来。

翻转部分链表:我们需要在每次递归时翻转 k 个节点,翻转完成后将新的头节点返回,并递归连接。

class Solution:def reverseKGroup(self, head: Optional[ListNode], k: int) -> Optional[ListNode]:# 检查链表是否有足够的节点进行翻转count = 0ptr = headwhile count < k and ptr:ptr = ptr.nextcount += 1# 如果节点数大于等于k,则进行翻转if count == k:# 翻转前k个节点prev = Nonecurr = headfor _ in range(k):next_node = curr.nextcurr.next = prevprev = currcurr = next_node# 递归处理剩余的部分,并连接回翻转后的部分head.next = self.reverseKGroup(ptr, k)# 返回新的头节点return prev# 如果节点数不足k,保持原样return head


http://www.mrgr.cn/news/48343.html

相关文章:

  • 简单工厂模式和策略模式的异同
  • 移动网络(2,3,4,5G)设备TCP通讯调试方法
  • LeetCode 热题 100_随机链表的复制(32_138_中等_C++)(单链表;哈希表+标号;哈希表+原结点与复制结点的对应关系;迭代 + 节点拆分)
  • 【Mysql优化】SQL优化最佳实践分析与总结
  • 梯度下降的数学原理:用泰勒公式剖析梯度下降
  • 【Java】4、虚拟机 JVM
  • 《 C++ 修炼全景指南:十五 》突破算法极限:并查集如何轻松搞定最棘手的连通性问题?
  • 《深度学习》【项目】OpenCV 答题卡识别 项目流程详解
  • QD1-P4 HTML标题标签(h)水平线标签(hr)
  • dd 工具 是一个在 Linux 系统中用于复制文件和转换文件的工具
  • vue后台管理系统从0到1(2)
  • Basic penetration_1靶机渗透
  • 数据结构——树和森林
  • Bob_ 1.0.1靶机渗透
  • Linux `sort` 命令详解
  • 【Python】Python实现串口通信(Python+Stm32)
  • 1374. 生成每种字符都是奇数个的字符串
  • 18708 最大子段和
  • ARM学习(32)FreeRTOS 调度和timer流程
  • Java->Map和Set
  • Jave常用的类---String类
  • 英语中 ing后缀
  • BUG修复(不断整理想起什么就整理什么)
  • Java中的流:高效处理数据的新方式
  • Vivado工程如何生成TCL文件以及如何利用TCL文件还原工程
  • 2025秋招倒计时---招联金融